@@ -5,11 +5,12 @@ var query_struct : Dictionary = {
55 table = "" ,
66 select = PoolStringArray ([]),
77 order = PoolStringArray ([]),
8+ Or = PoolStringArray ([]),
89 eq = PoolStringArray ([]),
910 neq = PoolStringArray ([]),
1011 like = PoolStringArray ([]),
1112 ilike = PoolStringArray ([]),
12- IS = PoolStringArray ([]),
13+ Is = PoolStringArray ([]),
1314 in = PoolStringArray ([]),
1415 fts = PoolStringArray ([]),
1516 plfts = PoolStringArray ([]),
@@ -56,7 +57,8 @@ enum Filters {
5657 FTS ,
5758 PLFTS ,
5859 PHFLTS ,
59- WFTS
60+ WFTS ,
61+ OR
6062 }
6163
6264func _init (_raw_query : String = "" , _raw_type : int = - 1 , _raw_header : PoolStringArray = [], _raw_body : String = "" ):
@@ -72,14 +74,17 @@ func build_query() -> String:
7274 if raw_query == "" and query == raw_query :
7375 for key in query_struct :
7476 if query_struct [key ].empty (): continue
77+ if query .length () > 0 : if not query [query .length ()- 1 ] in ["/" ,"?" ]: query += "&"
7578 match key :
7679 "table" :
7780 query += query_struct [key ]
7881 "select" , "order" :
7982 if query_struct [key ].empty (): continue
80- query += (key + "=" + PoolStringArray (query_struct [key ]).join ("," )+ "&" )
81- "eq" , "neq" , "lt" , "gt" , "lte" , "gte" , "like" , "ilike" , "IS " , "in" , "fts" , "plfts" , "phfts" , "wfts" :
83+ query += (key + "=" + PoolStringArray (query_struct [key ]).join ("," ))
84+ "eq" , "neq" , "lt" , "gt" , "lte" , "gte" , "like" , "ilike" , "Is " , "in" , "fts" , "plfts" , "phfts" , "wfts" :
8285 query += PoolStringArray (query_struct [key ]).join ("&" )
86+ "Or" :
87+ query += "or=(%s )" % [query_struct [key ].join ("," )]
8388 return query
8489
8590
@@ -90,7 +95,7 @@ func from(table_name : String) -> SupabaseQuery:
9095# Insert new Row
9196func insert (fields : Array , upsert : bool = false ) -> SupabaseQuery :
9297 request = REQUESTS .INSERT
93- body = JSON . print (fields )
98+ body = to_json (fields )
9499 if upsert : header += PoolStringArray (["Prefer: resolution=merge-duplicates" ])
95100 return self
96101
@@ -103,7 +108,7 @@ func select(columns : PoolStringArray = PoolStringArray(["*"])) -> SupabaseQuery
103108# Update Rows
104109func update (fields : Dictionary ) -> SupabaseQuery :
105110 request = REQUESTS .UPDATE
106- body = JSON . print (fields )
111+ body = to_json (fields )
107112 return self
108113
109114# Delete Rows
@@ -132,30 +137,43 @@ func order(column : String, direction : int = Directions.Ascending, nullsorder :
132137## [FILTERS] --------------------------------------------------------------------
133138
134139func filter (column : String , filter : int , value : String , _props : Dictionary = {}) -> SupabaseQuery :
140+ var filter_str : String = match_filter (filter )
141+ var array : PoolStringArray = query_struct [filter_str ] as PoolStringArray
142+ var struct_filter : String = filter_str
143+ if _props .has ("config" ):
144+ struct_filter += "({config} )" .format (_props )
145+ if _props .has ("negate" ):
146+ struct_filter = ("not." + struct_filter ) if _props .get ("negate" ) else struct_filter
147+ # Apply custom logic or continue with default logic
148+ match filter_str :
149+ "Or" :
150+ if _props .has ("queries" ):
151+ for query in _props .get ("queries" ):
152+ array .append (query .build_query ().replace ("=" ,"." ) if (not query is String ) else query )
153+ _ :
154+ array .append ("%s =%s .%s " % [column , struct_filter .to_lower (), value ])
155+ query_struct [filter_str ] = array
156+ return self
157+
158+ func match_filter (filter : int ) -> String :
135159 var filter_str : String
136160 match filter :
137161 Filters .EQUAL : filter_str = "eq"
138- Filters .NOT_EQUAL : filter_str = "neq"
162+ Filters .FTS : filter_str = "fts"
163+ Filters .ILIKE : filter_str = "ilike"
164+ Filters .IN : filter_str = "in"
165+ Filters .IS : filter_str = "Is"
139166 Filters .GREATER_THAN : filter_str = "gt"
140- Filters .LESS_THAN : filter_str = "lt"
141167 Filters .GREATER_THAN_OR_EQUAL : filter_str = "gte"
142- Filters .LESS_THAN_OR_EQUAL : filter_str = "lte"
143168 Filters .LIKE : filter_str = "like"
144- Filters .ILIKE : filter_str = "ilike "
145- Filters .IS : filter_str = "is "
146- Filters .IN : filter_str = "in "
147- Filters .FTS : filter_str = "fts "
169+ Filters .LESS_THAN : filter_str = "lt "
170+ Filters .LESS_THAN_OR_EQUAL : filter_str = "lte "
171+ Filters .NOT_EQUAL : filter_str = "neq "
172+ Filters .OR : filter_str = "Or "
148173 Filters .PLFTS : filter_str = "plfts"
149174 Filters .PHFTS : filter_str = "phfts"
150175 Filters .WFTS : filter_str = "wfts"
151- var array : PoolStringArray = query_struct [filter_str ] as PoolStringArray
152- var struct_filter : String = filter_str
153- if _props .has ("config" ):
154- struct_filter += "({config} )" .format (_props )
155- array .append ("%s =%s .%s " % [column , struct_filter , value ])
156- query_struct [filter_str ] = array
157- return self
158-
176+ return filter_str
159177
160178# Finds all rows whose value on the stated columns match the specified values.
161179func match (query_dict : Dictionary ) -> SupabaseQuery :
@@ -195,7 +213,7 @@ func lte(column : String, value : String) -> SupabaseQuery:
195213
196214# Finds all rows whose value in the stated column matches the supplied pattern (case sensitive).
197215func like (column : String , value : String ) -> SupabaseQuery :
198- filter (column , Filters .LIKE , value )
216+ filter (column , Filters .LIKE , "* %s *" % value )
199217 return self
200218
201219# Finds all rows whose value in the stated column matches the supplied pattern (case insensitive).
@@ -204,17 +222,17 @@ func ilike(column : String, value : String) -> SupabaseQuery:
204222 return self
205223
206224# A check for exact equality (null, true, false), finds all rows whose value on the stated column exactly match the specified value.
207- func Is (column : String , value ) -> SupabaseQuery :
208- filter (column , Filters .IS , str (value ))
225+ func Is (column : String , value , negate : bool = false ) -> SupabaseQuery :
226+ filter (column , Filters .IS , str (value ), { negate = negate } )
209227 return self
210228
211229# Finds all rows whose value on the stated column is found on the specified values.
212230func In (column : String , array : PoolStringArray ) -> SupabaseQuery :
213231 filter (column , Filters .IN , "(" + array .join ("," )+ ")" )
214232 return self
215233
216- func Or (column : String , value : String ) -> SupabaseQuery :
217- filter (column , Filters .OR , value )
234+ func Or (queries : Array ) -> SupabaseQuery :
235+ filter ("" , Filters .OR , "" , { queries = queries } )
218236 return self
219237
220238# Text Search
0 commit comments