PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
package expression import ( "fmt" "strings" ) // conditionMode specifies the types of the struct conditionBuilder, // representing the different types of Conditions (i.e. And, Or, Between, ...) type conditionMode int const ( // unsetCond catches errors for unset ConditionBuilder structs unsetCond conditionMode = iota // equalCond represents the Equals Condition equalCond // notEqualCond represents the Not Equals Condition notEqualCond // lessThanCond represents the LessThan Condition lessThanCond // lessThanEqualCond represents the LessThanOrEqual Condition lessThanEqualCond // greaterThanCond represents the GreaterThan Condition greaterThanCond // greaterThanEqualCond represents the GreaterThanEqual Condition greaterThanEqualCond // andCond represents the Logical And Condition andCond // orCond represents the Logical Or Condition orCond // notCond represents the Logical Not Condition notCond // betweenCond represents the Between Condition betweenCond // inCond represents the In Condition inCond // attrExistsCond represents the Attribute Exists Condition attrExistsCond // attrNotExistsCond represents the Attribute Not Exists Condition attrNotExistsCond // attrTypeCond represents the Attribute Type Condition attrTypeCond // beginsWithCond represents the Begins With Condition beginsWithCond // containsCond represents the Contains Condition containsCond ) // DynamoDBAttributeType specifies the type of an DynamoDB item attribute. This // enum is used in the AttributeType() function in order to be explicit about // the DynamoDB type that is being checked and ensure compile time checks. // More Informatin at http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html#Expressions.OperatorsAndFunctions.Functions type DynamoDBAttributeType string const ( // String represents the DynamoDB String type String DynamoDBAttributeType = "S" // StringSet represents the DynamoDB String Set type StringSet = "SS" // Number represents the DynamoDB Number type Number = "N" // NumberSet represents the DynamoDB Number Set type NumberSet = "NS" // Binary represents the DynamoDB Binary type Binary = "B" // BinarySet represents the DynamoDB Binary Set type BinarySet = "BS" // Boolean represents the DynamoDB Boolean type Boolean = "BOOL" // Null represents the DynamoDB Null type Null = "NULL" // List represents the DynamoDB List type List = "L" // Map represents the DynamoDB Map type Map = "M" ) // ConditionBuilder represents Condition Expressions and Filter Expressions // in DynamoDB. ConditionBuilders are one of the building blocks of the Builder // struct. Since Filter Expressions support all the same functions and formats // as Condition Expressions, ConditionBuilders represents both types of // Expressions. // More Information at: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html // More Information on Filter Expressions: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html#Query.FilterExpression type ConditionBuilder struct { operandList []OperandBuilder conditionList []ConditionBuilder mode conditionMode } // Equal returns a ConditionBuilder representing the equality clause of the two // argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the equal clause of the item attribute "foo" and // // the value 5 // condition := expression.Equal(expression.Name("foo"), expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Equal(expression.Name("foo"), expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo = :five" func Equal(left, right OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{left, right}, mode: equalCond, } } // Equal returns a ConditionBuilder representing the equality clause of the two // argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the equal clause of the item attribute "foo" and // // the value 5 // condition := expression.Name("foo").Equal(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("foo").Equal(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo = :five" func (nb NameBuilder) Equal(right OperandBuilder) ConditionBuilder { return Equal(nb, right) } // Equal returns a ConditionBuilder representing the equality clause of the two // argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the equal clause of the item attribute "foo" and // // the value 5 // condition := expression.Value(5).Equal(expression.Name("foo")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(5).Equal(expression.Name("foo")) // // Let :five be an ExpressionAttributeValue representing the value 5 // ":five = foo" func (vb ValueBuilder) Equal(right OperandBuilder) ConditionBuilder { return Equal(vb, right) } // Equal returns a ConditionBuilder representing the equality clause of the two // argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the equal clause of the size of the item // // attribute "foo" and the value 5 // condition := expression.Size(expression.Name("foo")).Equal(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("foo")).Equal(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "size (foo) = :five" func (sb SizeBuilder) Equal(right OperandBuilder) ConditionBuilder { return Equal(sb, right) } // NotEqual returns a ConditionBuilder representing the not equal clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the not equal clause of the item attribute "foo" // // and the value 5 // condition := expression.NotEqual(expression.Name("foo"), expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.NotEqual(expression.Name("foo"), expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo <> :five" func NotEqual(left, right OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{left, right}, mode: notEqualCond, } } // NotEqual returns a ConditionBuilder representing the not equal clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the not equal clause of the item attribute "foo" // // and the value 5 // condition := expression.Name("foo").NotEqual(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("foo").NotEqual(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo <> :five" func (nb NameBuilder) NotEqual(right OperandBuilder) ConditionBuilder { return NotEqual(nb, right) } // NotEqual returns a ConditionBuilder representing the not equal clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the not equal clause of the item attribute "foo" // // and the value 5 // condition := expression.Value(5).NotEqual(expression.Name("foo")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(5).NotEqual(expression.Name("foo")) // // Let :five be an ExpressionAttributeValue representing the value 5 // ":five <> foo" func (vb ValueBuilder) NotEqual(right OperandBuilder) ConditionBuilder { return NotEqual(vb, right) } // NotEqual returns a ConditionBuilder representing the not equal clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the not equal clause of the size of the item // // attribute "foo" and the value 5 // condition := expression.Size(expression.Name("foo")).NotEqual(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("foo")).NotEqual(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "size (foo) <> :five" func (sb SizeBuilder) NotEqual(right OperandBuilder) ConditionBuilder { return NotEqual(sb, right) } // LessThan returns a ConditionBuilder representing the less than clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the less than clause of the item attribute "foo" // // and the value 5 // condition := expression.LessThan(expression.Name("foo"), expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.LessThan(expression.Name("foo"), expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo < :five" func LessThan(left, right OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{left, right}, mode: lessThanCond, } } // LessThan returns a ConditionBuilder representing the less than clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the less than clause of the item attribute "foo" // // and the value 5 // condition := expression.Name("foo").LessThan(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("foo").LessThan(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo < :five" func (nb NameBuilder) LessThan(right OperandBuilder) ConditionBuilder { return LessThan(nb, right) } // LessThan returns a ConditionBuilder representing the less than clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the less than clause of the item attribute "foo" // // and the value 5 // condition := expression.Value(5).LessThan(expression.Name("foo")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(5).LessThan(expression.Name("foo")) // // Let :five be an ExpressionAttributeValue representing the value 5 // ":five < foo" func (vb ValueBuilder) LessThan(right OperandBuilder) ConditionBuilder { return LessThan(vb, right) } // LessThan returns a ConditionBuilder representing the less than clause of the // two argument OperandBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the less than clause of the size of the item // // attribute "foo" and the value 5 // condition := expression.Size(expression.Name("foo")).LessThan(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("foo")).LessThan(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "size (foo) < :five" func (sb SizeBuilder) LessThan(right OperandBuilder) ConditionBuilder { return LessThan(sb, right) } // LessThanEqual returns a ConditionBuilder representing the less than equal to // clause of the two argument OperandBuilders. The resulting ConditionBuilder // can be used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the less than equal to clause of the item // // attribute "foo" and the value 5 // condition := expression.LessThanEqual(expression.Name("foo"), expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.LessThanEqual(expression.Name("foo"), expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo <= :five" func LessThanEqual(left, right OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{left, right}, mode: lessThanEqualCond, } } // LessThanEqual returns a ConditionBuilder representing the less than equal to // clause of the two argument OperandBuilders. The resulting ConditionBuilder // can be used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the less than equal to clause of the item // // attribute "foo" and the value 5 // condition := expression.Name("foo").LessThanEqual(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("foo").LessThanEqual(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo <= :five" func (nb NameBuilder) LessThanEqual(right OperandBuilder) ConditionBuilder { return LessThanEqual(nb, right) } // LessThanEqual returns a ConditionBuilder representing the less than equal to // clause of the two argument OperandBuilders. The resulting ConditionBuilder // can be used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the less than equal to clause of the item // // attribute "foo" and the value 5 // condition := expression.Value(5).LessThanEqual(expression.Name("foo")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(5).LessThanEqual(expression.Name("foo")) // // Let :five be an ExpressionAttributeValue representing the value 5 // ":five <= foo" func (vb ValueBuilder) LessThanEqual(right OperandBuilder) ConditionBuilder { return LessThanEqual(vb, right) } // LessThanEqual returns a ConditionBuilder representing the less than equal to // clause of the two argument OperandBuilders. The resulting ConditionBuilder // can be used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the less than equal to clause of the size of the // // item attribute "foo" and the value 5 // condition := expression.Size(expression.Name("foo")).LessThanEqual(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("foo")).LessThanEqual(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "size (foo) <= :five" func (sb SizeBuilder) LessThanEqual(right OperandBuilder) ConditionBuilder { return LessThanEqual(sb, right) } // GreaterThan returns a ConditionBuilder representing the greater than clause // of the two argument OperandBuilders. The resulting ConditionBuilder can be // used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than clause of the item attribute // // "foo" and the value 5 // condition := expression.GreaterThan(expression.Name("foo"), expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.GreaterThan(expression.Name("foo"), expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo > :five" func GreaterThan(left, right OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{left, right}, mode: greaterThanCond, } } // GreaterThan returns a ConditionBuilder representing the greater than clause // of the two argument OperandBuilders. The resulting ConditionBuilder can be // used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than clause of the item attribute // // "foo" and the value 5 // condition := expression.Name("foo").GreaterThan(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("foo").GreaterThan(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo > :five" func (nb NameBuilder) GreaterThan(right OperandBuilder) ConditionBuilder { return GreaterThan(nb, right) } // GreaterThan returns a ConditionBuilder representing the greater than clause // of the two argument OperandBuilders. The resulting ConditionBuilder can be // used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than clause of the item attribute // // "foo" and the value 5 // condition := expression.Value(5).GreaterThan(expression.Name("foo")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(5).GreaterThan(expression.Name("foo")) // // Let :five be an ExpressionAttributeValue representing the value 5 // ":five > foo" func (vb ValueBuilder) GreaterThan(right OperandBuilder) ConditionBuilder { return GreaterThan(vb, right) } // GreaterThan returns a ConditionBuilder representing the greater than // clause of the two argument OperandBuilders. The resulting ConditionBuilder // can be used as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than clause of the size of the item // // attribute "foo" and the value 5 // condition := expression.Size(expression.Name("foo")).GreaterThan(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("foo")).GreaterThan(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "size (foo) > :five" func (sb SizeBuilder) GreaterThan(right OperandBuilder) ConditionBuilder { return GreaterThan(sb, right) } // GreaterThanEqual returns a ConditionBuilder representing the greater than // equal to clause of the two argument OperandBuilders. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than equal to clause of the item // // attribute "foo" and the value 5 // condition := expression.GreaterThanEqual(expression.Name("foo"), expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.GreaterThanEqual(expression.Name("foo"), expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo >= :five" func GreaterThanEqual(left, right OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{left, right}, mode: greaterThanEqualCond, } } // GreaterThanEqual returns a ConditionBuilder representing the greater than // equal to clause of the two argument OperandBuilders. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than equal to clause of the item // // attribute "foo" and the value 5 // condition := expression.Name("foo").GreaterThanEqual(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("foo").GreaterThanEqual(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "foo >= :five" func (nb NameBuilder) GreaterThanEqual(right OperandBuilder) ConditionBuilder { return GreaterThanEqual(nb, right) } // GreaterThanEqual returns a ConditionBuilder representing the greater than // equal to clause of the two argument OperandBuilders. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than equal to clause of the item // // attribute "foo" and the value 5 // condition := expression.Value(5).GreaterThanEqual(expression.Name("foo")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(5).GreaterThanEqual(expression.Name("foo")) // // Let :five be an ExpressionAttributeValue representing the value 5 // ":five >= foo" func (vb ValueBuilder) GreaterThanEqual(right OperandBuilder) ConditionBuilder { return GreaterThanEqual(vb, right) } // GreaterThanEqual returns a ConditionBuilder representing the greater than // equal to clause of the two argument OperandBuilders. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the greater than equal to clause of the size of // // the item attribute "foo" and the value 5 // condition := expression.Size(expression.Name("foo")).GreaterThanEqual(expression.Value(5)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("foo")).GreaterThanEqual(expression.Value(5)) // // Let :five be an ExpressionAttributeValue representing the value 5 // "size (foo) >= :five" func (sb SizeBuilder) GreaterThanEqual(right OperandBuilder) ConditionBuilder { return GreaterThanEqual(sb, right) } // And returns a ConditionBuilder representing the logical AND clause of the // argument ConditionBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. Note that And() can take a variadic number of // ConditionBuilders as arguments. // // Example: // // // condition represents the condition where the item attribute "Name" is // // equal to value "Generic Name" AND the item attribute "Age" is less // // than value 40 // condition := expression.And(expression.Name("Name").Equal(expression.Value("Generic Name")), expression.Name("Age").LessThan(expression.Value(40))) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.And(expression.Name("Name").Equal(expression.Value("Generic Name")), expression.Name("Age").LessThan(expression.Value(40))) // // Let #NAME, :name, and :forty be ExpressionAttributeName and // // ExpressionAttributeValues representing the item attribute "Name", the // // value "Generic Name", and the value 40 // "(#NAME = :name) AND (Age < :forty)" func And(left, right ConditionBuilder, other ...ConditionBuilder) ConditionBuilder { other = append([]ConditionBuilder{left, right}, other...) return ConditionBuilder{ conditionList: other, mode: andCond, } } // And returns a ConditionBuilder representing the logical AND clause of the // argument ConditionBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. Note that And() can take a variadic number of // ConditionBuilders as arguments. // // Example: // // // condition represents the condition where the item attribute "Name" is // // equal to value "Generic Name" AND the item attribute "Age" is less // // than value 40 // condition := expression.Name("Name").Equal(expression.Value("Generic Name")).And(expression.Name("Age").LessThan(expression.Value(40))) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Name").Equal(expression.Value("Generic Name")).And(expression.Name("Age").LessThan(expression.Value(40))) // // Let #NAME, :name, and :forty be ExpressionAttributeName and // // ExpressionAttributeValues representing the item attribute "Name", the // // value "Generic Name", and the value 40 // "(#NAME = :name) AND (Age < :forty)" func (cb ConditionBuilder) And(right ConditionBuilder, other ...ConditionBuilder) ConditionBuilder { return And(cb, right, other...) } // Or returns a ConditionBuilder representing the logical OR clause of the // argument ConditionBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. Note that Or() can take a variadic number of // ConditionBuilders as arguments. // // Example: // // // condition represents the condition where the item attribute "Price" is // // less than the value 100 OR the item attribute "Rating" is greater than // // the value 8 // condition := expression.Or(expression.Name("Price").Equal(expression.Value(100)), expression.Name("Rating").LessThan(expression.Value(8))) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Or(expression.Name("Price").Equal(expression.Value(100)), expression.Name("Rating").LessThan(expression.Value(8))) // // Let :price and :rating be ExpressionAttributeValues representing the // // the value 100 and value 8 respectively // "(Price < :price) OR (Rating > :rating)" func Or(left, right ConditionBuilder, other ...ConditionBuilder) ConditionBuilder { other = append([]ConditionBuilder{left, right}, other...) return ConditionBuilder{ conditionList: other, mode: orCond, } } // Or returns a ConditionBuilder representing the logical OR clause of the // argument ConditionBuilders. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. Note that Or() can take a variadic number of // ConditionBuilders as arguments. // // Example: // // // condition represents the condition where the item attribute "Price" is // // less than the value 100 OR the item attribute "Rating" is greater than // // the value 8 // condition := expression.Name("Price").Equal(expression.Value(100)).Or(expression.Name("Rating").LessThan(expression.Value(8))) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Price").Equal(expression.Value(100)).Or(expression.Name("Rating").LessThan(expression.Value(8))) // // Let :price and :rating be ExpressionAttributeValues representing the // // the value 100 and value 8 respectively // "(Price < :price) OR (Rating > :rating)" func (cb ConditionBuilder) Or(right ConditionBuilder, other ...ConditionBuilder) ConditionBuilder { return Or(cb, right, other...) } // Not returns a ConditionBuilder representing the logical NOT clause of the // argument ConditionBuilder. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the condition where the item attribute "Name" // // does not begin with "test" // condition := expression.Not(expression.Name("Name").BeginsWith("test")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Not(expression.Name("Name").BeginsWith("test")) // // Let :prefix be an ExpressionAttributeValue representing the value // // "test" // "NOT (begins_with (:prefix))" func Not(conditionBuilder ConditionBuilder) ConditionBuilder { return ConditionBuilder{ conditionList: []ConditionBuilder{conditionBuilder}, mode: notCond, } } // Not returns a ConditionBuilder representing the logical NOT clause of the // argument ConditionBuilder. The resulting ConditionBuilder can be used as a // part of other Condition Expressions or as an argument to the WithCondition() // method for the Builder struct. // // Example: // // // condition represents the condition where the item attribute "Name" // // does not begin with "test" // condition := expression.Name("Name").BeginsWith("test").Not() // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Name").BeginsWith("test").Not() // // Let :prefix be an ExpressionAttributeValue representing the value // // "test" // "NOT (begins_with (:prefix))" func (cb ConditionBuilder) Not() ConditionBuilder { return Not(cb) } // Between returns a ConditionBuilder representing the result of the // BETWEEN function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the value of the item // // attribute "Rating" is between values 5 and 10 // condition := expression.Between(expression.Name("Rating"), expression.Value(5), expression.Value(10)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Between(expression.Name("Rating"), expression.Value(5), expression.Value(10)) // // Let :five and :ten be ExpressionAttributeValues representing the value // // 5 and the value 10 // "Rating BETWEEN :five AND :ten" func Between(op, lower, upper OperandBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{op, lower, upper}, mode: betweenCond, } } // Between returns a ConditionBuilder representing the result of the // BETWEEN function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the value of the item // // attribute "Rating" is between values 5 and 10 // condition := expression.Name("Rating").Between(expression.Value(5), expression.Value(10)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Rating").Between(expression.Value(5), expression.Value(10)) // // Let :five and :ten be ExpressionAttributeValues representing the value // // 5 and the value 10 // "Rating BETWEEN :five AND :ten" func (nb NameBuilder) Between(lower, upper OperandBuilder) ConditionBuilder { return Between(nb, lower, upper) } // Between returns a ConditionBuilder representing the result of the // BETWEEN function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the value 6 is between values // // 5 and 10 // condition := expression.Value(6).Between(expression.Value(5), expression.Value(10)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value(6).Between(expression.Value(5), expression.Value(10)) // // Let :six, :five and :ten be ExpressionAttributeValues representing the // // values 6, 5, and 10 respectively // ":six BETWEEN :five AND :ten" func (vb ValueBuilder) Between(lower, upper OperandBuilder) ConditionBuilder { return Between(vb, lower, upper) } // Between returns a ConditionBuilder representing the result of the // BETWEEN function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the size of the item // // attribute "InviteList" is between values 5 and 10 // condition := expression.Size(expression.Name("InviteList")).Between(expression.Value(5), expression.Value(10)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("InviteList")).Between(expression.Value(5), expression.Value(10)) // // Let :five and :ten be ExpressionAttributeValues representing the value // // 5 and the value 10 // "size (InviteList) BETWEEN :five AND :ten" func (sb SizeBuilder) Between(lower, upper OperandBuilder) ConditionBuilder { return Between(sb, lower, upper) } // In returns a ConditionBuilder representing the result of the IN function // in DynamoDB Condition Expressions. The resulting ConditionBuilder can be used // as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the value of the item // // attribute "Color" is checked against the list of colors "red", // // "green", and "blue". // condition := expression.In(expression.Name("Color"), expression.Value("red"), expression.Value("green"), expression.Value("blue")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.In(expression.Name("Color"), expression.Value("red"), expression.Value("green"), expression.Value("blue")) // // Let :red, :green, :blue be ExpressionAttributeValues representing the // // values "red", "green", and "blue" respectively // "Color IN (:red, :green, :blue)" func In(left, right OperandBuilder, other ...OperandBuilder) ConditionBuilder { other = append([]OperandBuilder{left, right}, other...) return ConditionBuilder{ operandList: other, mode: inCond, } } // In returns a ConditionBuilder representing the result of the IN function // in DynamoDB Condition Expressions. The resulting ConditionBuilder can be used // as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the value of the item // // attribute "Color" is checked against the list of colors "red", // // "green", and "blue". // condition := expression.Name("Color").In(expression.Value("red"), expression.Value("green"), expression.Value("blue")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Color").In(expression.Value("red"), expression.Value("green"), expression.Value("blue")) // // Let :red, :green, :blue be ExpressionAttributeValues representing the // // values "red", "green", and "blue" respectively // "Color IN (:red, :green, :blue)" func (nb NameBuilder) In(right OperandBuilder, other ...OperandBuilder) ConditionBuilder { return In(nb, right, other...) } // In returns a ConditionBuilder representing the result of the IN function // TODO change this one // in DynamoDB Condition Expressions. The resulting ConditionBuilder can be used // as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the value "yellow" is checked // // against the list of colors "red", "green", and "blue". // condition := expression.Value("yellow").In(expression.Value("red"), expression.Value("green"), expression.Value("blue")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Value("yellow").In(expression.Value("red"), expression.Value("green"), expression.Value("blue")) // // Let :yellow, :red, :green, :blue be ExpressionAttributeValues // // representing the values "yellow", "red", "green", and "blue" // // respectively // ":yellow IN (:red, :green, :blue)" func (vb ValueBuilder) In(right OperandBuilder, other ...OperandBuilder) ConditionBuilder { return In(vb, right, other...) } // In returns a ConditionBuilder representing the result of the IN function // in DynamoDB Condition Expressions. The resulting ConditionBuilder can be used // as a part of other Condition Expressions or as an argument to the // WithCondition() method for the Builder struct. // // Example: // // // condition represents the condition where the size of the item // // attribute "Donuts" is checked against the list of numbers 12, 24, and // // 36. // condition := expression.Size(expression.Name("Donuts")).In(expression.Value(12), expression.Value(24), expression.Value(36)) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Size(expression.Name("Donuts")).In(expression.Value(12), expression.Value(24), expression.Value(36)) // // Let :dozen, :twoDozen, :threeDozen be ExpressionAttributeValues // // representing the values 12, 24, and 36 respectively // "size (Donuts) IN (12, 24, 36)" func (sb SizeBuilder) In(right OperandBuilder, other ...OperandBuilder) ConditionBuilder { return In(sb, right, other...) } // AttributeExists returns a ConditionBuilder representing the result of the // attribute_exists function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "Age" exists or not // condition := expression.AttributeExists(expression.Name("Age")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.AttributeExists(expression.Name("Age")) // "attribute_exists (Age))" func AttributeExists(nameBuilder NameBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{nameBuilder}, mode: attrExistsCond, } } // AttributeExists returns a ConditionBuilder representing the result of the // attribute_exists function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "Age" exists or not // condition := expression.Name("Age").AttributeExists() // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Age").AttributeExists() // "attribute_exists (Age))" func (nb NameBuilder) AttributeExists() ConditionBuilder { return AttributeExists(nb) } // AttributeNotExists returns a ConditionBuilder representing the result of // the attribute_not_exists function in DynamoDB Condition Expressions. The // resulting ConditionBuilder can be used as a part of other Condition // Expressions or as an argument to the WithCondition() method for the Builder // struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "Age" exists or not // condition := expression.AttributeNotExists(expression.Name("Age")) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.AttributeNotExists(expression.Name("Age")) // "attribute_not_exists (Age))" func AttributeNotExists(nameBuilder NameBuilder) ConditionBuilder { return ConditionBuilder{ operandList: []OperandBuilder{nameBuilder}, mode: attrNotExistsCond, } } // AttributeNotExists returns a ConditionBuilder representing the result of // the attribute_not_exists function in DynamoDB Condition Expressions. The // resulting ConditionBuilder can be used as a part of other Condition // Expressions or as an argument to the WithCondition() method for the Builder // struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "Age" exists or not // condition := expression.Name("Age").AttributeNotExists() // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Age").AttributeNotExists() // "attribute_not_exists (Age))" func (nb NameBuilder) AttributeNotExists() ConditionBuilder { return AttributeNotExists(nb) } // AttributeType returns a ConditionBuilder representing the result of the // attribute_type function in DynamoDB Condition Expressions. The DynamoDB types // are represented by the type DynamoDBAttributeType. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "Age" has the DynamoDB type Number or not // condition := expression.AttributeType(expression.Name("Age"), expression.Number) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.AttributeType(expression.Name("Age"), expression.Number) // // Let :type be an ExpressionAttributeValue representing the value "N" // "attribute_type (Age, :type)" func AttributeType(nameBuilder NameBuilder, attributeType DynamoDBAttributeType) ConditionBuilder { v := ValueBuilder{ value: string(attributeType), } return ConditionBuilder{ operandList: []OperandBuilder{nameBuilder, v}, mode: attrTypeCond, } } // AttributeType returns a ConditionBuilder representing the result of the // attribute_type function in DynamoDB Condition Expressions. The DynamoDB types // are represented by the type DynamoDBAttributeType. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "Age" has the DynamoDB type Number or not // condition := expression.Name("Age").AttributeType(expression.Number) // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("Age").AttributeType(expression.Number) // // Let :type be an ExpressionAttributeValue representing the value "N" // "attribute_type (Age, :type)" func (nb NameBuilder) AttributeType(attributeType DynamoDBAttributeType) ConditionBuilder { return AttributeType(nb, attributeType) } // BeginsWith returns a ConditionBuilder representing the result of the // begins_with function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "CodeName" starts with the substring "Ben" // condition := expression.BeginsWith(expression.Name("CodeName"), "Ben") // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.BeginsWith(expression.Name("CodeName"), "Ben") // // Let :ben be an ExpressionAttributeValue representing the value "Ben" // "begins_with (CodeName, :ben)" func BeginsWith(nameBuilder NameBuilder, prefix string) ConditionBuilder { v := ValueBuilder{ value: prefix, } return ConditionBuilder{ operandList: []OperandBuilder{nameBuilder, v}, mode: beginsWithCond, } } // BeginsWith returns a ConditionBuilder representing the result of the // begins_with function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "CodeName" starts with the substring "Ben" // condition := expression.Name("CodeName").BeginsWith("Ben") // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("CodeName").BeginsWith("Ben") // // Let :ben be an ExpressionAttributeValue representing the value "Ben" // "begins_with (CodeName, :ben)" func (nb NameBuilder) BeginsWith(prefix string) ConditionBuilder { return BeginsWith(nb, prefix) } // Contains returns a ConditionBuilder representing the result of the // contains function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "InviteList" has the value "Ben" // condition := expression.Contains(expression.Name("InviteList"), "Ben") // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Contains(expression.Name("InviteList"), "Ben") // // Let :ben be an ExpressionAttributeValue representing the value "Ben" // "contains (InviteList, :ben)" func Contains(nameBuilder NameBuilder, substr string) ConditionBuilder { v := ValueBuilder{ value: substr, } return ConditionBuilder{ operandList: []OperandBuilder{nameBuilder, v}, mode: containsCond, } } // Contains returns a ConditionBuilder representing the result of the // contains function in DynamoDB Condition Expressions. The resulting // ConditionBuilder can be used as a part of other Condition Expressions or as // an argument to the WithCondition() method for the Builder struct. // // Example: // // // condition represents the boolean condition of whether the item // // attribute "InviteList" has the value "Ben" // condition := expression.Name("InviteList").Contains("Ben") // // // Used in another Condition Expression // anotherCondition := expression.Not(condition) // // Used to make an Builder // builder := expression.NewBuilder().WithCondition(condition) // // Expression Equivalent: // // expression.Name("InviteList").Contains("Ben") // // Let :ben be an ExpressionAttributeValue representing the value "Ben" // "contains (InviteList, :ben)" func (nb NameBuilder) Contains(substr string) ConditionBuilder { return Contains(nb, substr) } // buildTree builds a tree structure of exprNodes based on the tree // structure of the input ConditionBuilder's child ConditionBuilders and // OperandBuilders. buildTree() satisfies the treeBuilder interface so // ConditionBuilder can be a part of Builder and Expression struct. func (cb ConditionBuilder) buildTree() (exprNode, error) { childNodes, err := cb.buildChildNodes() if err != nil { return exprNode{}, err } ret := exprNode{ children: childNodes, } switch cb.mode { case equalCond, notEqualCond, lessThanCond, lessThanEqualCond, greaterThanCond, greaterThanEqualCond: return compareBuildCondition(cb.mode, ret) case andCond, orCond: return compoundBuildCondition(cb, ret) case notCond: return notBuildCondition(ret) case betweenCond: return betweenBuildCondition(ret) case inCond: return inBuildCondition(cb, ret) case attrExistsCond: return attrExistsBuildCondition(ret) case attrNotExistsCond: return attrNotExistsBuildCondition(ret) case attrTypeCond: return attrTypeBuildCondition(ret) case beginsWithCond: return beginsWithBuildCondition(ret) case containsCond: return containsBuildCondition(ret) case unsetCond: return exprNode{}, newUnsetParameterError("buildTree", "ConditionBuilder") default: return exprNode{}, fmt.Errorf("build condition error: unsupported mode: %v", cb.mode) } } // compareBuildCondition is the function to make exprNodes from Compare // ConditionBuilders. compareBuildCondition is only called by the // buildTree method. This function assumes that the argument ConditionBuilder // has the right format. func compareBuildCondition(conditionMode conditionMode, node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c switch conditionMode { case equalCond: node.fmtExpr = "$c = $c" case notEqualCond: node.fmtExpr = "$c <> $c" case lessThanCond: node.fmtExpr = "$c < $c" case lessThanEqualCond: node.fmtExpr = "$c <= $c" case greaterThanCond: node.fmtExpr = "$c > $c" case greaterThanEqualCond: node.fmtExpr = "$c >= $c" default: return exprNode{}, fmt.Errorf("build compare condition error: unsupported mode: %v", conditionMode) } return node, nil } // compoundBuildCondition is the function to make exprNodes from And/Or // ConditionBuilders. compoundBuildCondition is only called by the // buildTree method. This function assumes that the argument ConditionBuilder // has the right format. func compoundBuildCondition(conditionBuilder ConditionBuilder, node exprNode) (exprNode, error) { // create a string with escaped characters to substitute them with proper // aliases during runtime var mode string switch conditionBuilder.mode { case andCond: mode = " AND " case orCond: mode = " OR " default: return exprNode{}, fmt.Errorf("build compound condition error: unsupported mode: %v", conditionBuilder.mode) } node.fmtExpr = "($c)" + strings.Repeat(mode+"($c)", len(conditionBuilder.conditionList)-1) return node, nil } // notBuildCondition is the function to make exprNodes from Not // ConditionBuilders. notBuildCondition is only called by the // buildTree method. This function assumes that the argument ConditionBuilder // has the right format. func notBuildCondition(node exprNode) (exprNode, error) { // create a string with escaped characters to substitute them with proper // aliases during runtime node.fmtExpr = "NOT ($c)" return node, nil } // betweenBuildCondition is the function to make exprNodes from Between // ConditionBuilders. BuildCondition is only called by the // buildTree method. This function assumes that the argument ConditionBuilder // has the right format. func betweenBuildCondition(node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "$c BETWEEN $c AND $c" return node, nil } // inBuildCondition is the function to make exprNodes from In // ConditionBuilders. inBuildCondition is only called by the // buildTree method. This function assumes that the argument ConditionBuilder // has the right format. func inBuildCondition(conditionBuilder ConditionBuilder, node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "$c IN ($c" + strings.Repeat(", $c", len(conditionBuilder.operandList)-2) + ")" return node, nil } // attrExistsBuildCondition is the function to make exprNodes from // AttrExistsCond ConditionBuilders. attrExistsBuildCondition is only // called by the buildTree method. This function assumes that the argument // ConditionBuilder has the right format. func attrExistsBuildCondition(node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "attribute_exists ($c)" return node, nil } // attrNotExistsBuildCondition is the function to make exprNodes from // AttrNotExistsCond ConditionBuilders. attrNotExistsBuildCondition is only // called by the buildTree method. This function assumes that the argument // ConditionBuilder has the right format. func attrNotExistsBuildCondition(node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "attribute_not_exists ($c)" return node, nil } // attrTypeBuildCondition is the function to make exprNodes from AttrTypeCond // ConditionBuilders. attrTypeBuildCondition is only called by the // buildTree method. This function assumes that the argument // ConditionBuilder has the right format. func attrTypeBuildCondition(node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "attribute_type ($c, $c)" return node, nil } // beginsWithBuildCondition is the function to make exprNodes from // BeginsWithCond ConditionBuilders. beginsWithBuildCondition is only // called by the buildTree method. This function assumes that the argument // ConditionBuilder has the right format. func beginsWithBuildCondition(node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "begins_with ($c, $c)" return node, nil } // containsBuildCondition is the function to make exprNodes from // ContainsCond ConditionBuilders. containsBuildCondition is only // called by the buildTree method. This function assumes that the argument // ConditionBuilder has the right format. func containsBuildCondition(node exprNode) (exprNode, error) { // Create a string with special characters that can be substituted later: $c node.fmtExpr = "contains ($c, $c)" return node, nil } // buildChildNodes creates the list of the child exprNodes. This avoids // duplication of code amongst the various buildTree functions. func (cb ConditionBuilder) buildChildNodes() ([]exprNode, error) { childNodes := make([]exprNode, 0, len(cb.conditionList)+len(cb.operandList)) for _, condition := range cb.conditionList { node, err := condition.buildTree() if err != nil { return []exprNode{}, err } childNodes = append(childNodes, node) } for _, ope := range cb.operandList { operand, err := ope.BuildOperand() if err != nil { return []exprNode{}, err } childNodes = append(childNodes, operand.exprNode) } return childNodes, nil }