@@ -1017,11 +1017,36 @@ private function parseQueries(array $queries): array
10171017 case Query::TYPE_EQUAL :
10181018 $ this ->validateAttributeName ($ attribute );
10191019 $ escapedAttr = $ this ->escapeIdentifier ($ attribute );
1020- $ paramName = 'param_ ' . $ paramCounter ++;
1021- // Query values are arrays, use first element
1022- $ value = is_array ($ values ) && !empty ($ values ) ? $ values [0 ] : $ values ;
1023- $ filters [] = "{$ escapedAttr } = { {$ paramName }:String} " ;
1024- $ params [$ paramName ] = $ this ->formatParamValue ($ value );
1020+
1021+ // Support arrays of values (produce IN (...) ) or single value equality
1022+ if (is_array ($ values )) {
1023+ $ inParams = [];
1024+ foreach ($ values as $ value ) {
1025+ $ paramName = 'param_ ' . $ paramCounter ++;
1026+ if ($ attribute === 'time ' ) {
1027+ $ inParams [] = "{ {$ paramName }:DateTime64(3)} " ;
1028+ $ params [$ paramName ] = $ this ->formatDateTime ($ value );
1029+ } else {
1030+ $ inParams [] = "{ {$ paramName }:String} " ;
1031+ $ params [$ paramName ] = $ this ->formatParamValue ($ value );
1032+ }
1033+ }
1034+
1035+ if (count ($ inParams ) === 1 ) {
1036+ $ filters [] = "{$ escapedAttr } = " . $ inParams [0 ];
1037+ } else {
1038+ $ filters [] = "{$ escapedAttr } IN ( " . implode (', ' , $ inParams ) . ") " ;
1039+ }
1040+ } else {
1041+ $ paramName = 'param_ ' . $ paramCounter ++;
1042+ if ($ attribute === 'time ' ) {
1043+ $ filters [] = "{$ escapedAttr } = { {$ paramName }:DateTime64(3)} " ;
1044+ $ params [$ paramName ] = $ this ->formatDateTime ($ values );
1045+ } else {
1046+ $ filters [] = "{$ escapedAttr } = { {$ paramName }:String} " ;
1047+ $ params [$ paramName ] = $ this ->formatParamValue ($ values );
1048+ }
1049+ }
10251050 break ;
10261051
10271052 case Query::TYPE_LESSER :
@@ -1072,31 +1097,63 @@ private function parseQueries(array $queries): array
10721097 }
10731098 break ;
10741099
1075- case Query::TYPE_IN :
1076- // SELECT allows selecting multiple columns/values
1100+
1101+
1102+ case Query::TYPE_ORDER_DESC :
1103+ $ this ->validateAttributeName ($ attribute );
1104+ $ escapedAttr = $ this ->escapeIdentifier ($ attribute );
1105+ $ orderBy [] = "{$ escapedAttr } DESC " ;
1106+ break ;
1107+
1108+ case Query::TYPE_ORDER_ASC :
1109+ $ this ->validateAttributeName ($ attribute );
1110+ $ escapedAttr = $ this ->escapeIdentifier ($ attribute );
1111+ $ orderBy [] = "{$ escapedAttr } ASC " ;
1112+ break ;
1113+
1114+ case Query::TYPE_CONTAINS :
10771115 $ this ->validateAttributeName ($ attribute );
10781116 $ escapedAttr = $ this ->escapeIdentifier ($ attribute );
10791117 $ inParams = [];
10801118 foreach ($ values as $ value ) {
10811119 $ paramName = 'param_ ' . $ paramCounter ++;
1082- $ inParams [] = "{ {$ paramName }:String} " ;
1083- $ params [$ paramName ] = $ this ->formatParamValue ($ value );
1120+ if ($ attribute === 'time ' ) {
1121+ $ inParams [] = "{ {$ paramName }:DateTime64(3)} " ;
1122+ $ params [$ paramName ] = $ this ->formatDateTime ($ value );
1123+ } else {
1124+ $ inParams [] = "{ {$ paramName }:String} " ;
1125+ $ params [$ paramName ] = $ this ->formatParamValue ($ value );
1126+ }
10841127 }
10851128 if (!empty ($ inParams )) {
10861129 $ filters [] = "{$ escapedAttr } IN ( " . implode (', ' , $ inParams ) . ") " ;
10871130 }
10881131 break ;
10891132
1090- case Query::TYPE_ORDER_DESC :
1133+ case Query::TYPE_LESSER_EQUAL :
10911134 $ this ->validateAttributeName ($ attribute );
10921135 $ escapedAttr = $ this ->escapeIdentifier ($ attribute );
1093- $ orderBy [] = "{$ escapedAttr } DESC " ;
1136+ $ paramName = 'param_ ' . $ paramCounter ++;
1137+ if ($ attribute === 'time ' ) {
1138+ $ filters [] = "{$ escapedAttr } <= { {$ paramName }:DateTime64(3)} " ;
1139+ $ params [$ paramName ] = $ this ->formatDateTime (is_array ($ values ) ? ($ values [0 ] ?? null ) : $ values );
1140+ } else {
1141+ $ filters [] = "{$ escapedAttr } <= { {$ paramName }:String} " ;
1142+ $ params [$ paramName ] = $ this ->formatParamValue (is_array ($ values ) ? ($ values [0 ] ?? null ) : $ values );
1143+ }
10941144 break ;
10951145
1096- case Query::TYPE_ORDER_ASC :
1146+ case Query::TYPE_GREATER_EQUAL :
10971147 $ this ->validateAttributeName ($ attribute );
10981148 $ escapedAttr = $ this ->escapeIdentifier ($ attribute );
1099- $ orderBy [] = "{$ escapedAttr } ASC " ;
1149+ $ paramName = 'param_ ' . $ paramCounter ++;
1150+ if ($ attribute === 'time ' ) {
1151+ $ filters [] = "{$ escapedAttr } >= { {$ paramName }:DateTime64(3)} " ;
1152+ $ params [$ paramName ] = $ this ->formatDateTime (is_array ($ values ) ? ($ values [0 ] ?? null ) : $ values );
1153+ } else {
1154+ $ filters [] = "{$ escapedAttr } >= { {$ paramName }:String} " ;
1155+ $ params [$ paramName ] = $ this ->formatParamValue (is_array ($ values ) ? ($ values [0 ] ?? null ) : $ values );
1156+ }
11001157 break ;
11011158
11021159 case Query::TYPE_LIMIT :
0 commit comments