mirror of
				https://github.com/lxsang/silk.git
				synced 2025-10-31 02:15:47 +01:00 
			
		
		
		
	Allow to declare multiple ORs of the same field in the SQL filter object
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				gitea-sync/silk/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	gitea-sync/silk/pipeline/head This commit looks good
				
			This commit is contained in:
		| @@ -60,6 +60,10 @@ function SQLQueryGenerator:sql_select() | |||||||
|         table.insert(segments, o) |         table.insert(segments, o) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     if self.limit then | ||||||
|  |         table.insert(segments, "LIMIT "..self.limit) | ||||||
|  |     end | ||||||
|  |  | ||||||
|     return true, table.concat(segments, " ") |     return true, table.concat(segments, " ") | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -160,17 +164,23 @@ function SQLQueryGenerator:sql_where(cond, obj) | |||||||
|     for k, v in pairs(obj) do |     for k, v in pairs(obj) do | ||||||
|         if k == "$and" or k == "$or" then |         if k == "$and" or k == "$or" then | ||||||
|             table.insert(conds, self:sql_where(k, v)) |             table.insert(conds, self:sql_where(k, v)) | ||||||
|  |         else | ||||||
|  |             if type(v) == "table" and not (k:match("%$.*in") or k:match("%$.*between") ) then | ||||||
|  |                 for i,el in ipairs(v) do | ||||||
|  |                     table.insert(conds, self:binary(k, el)) | ||||||
|  |                 end | ||||||
|             else |             else | ||||||
|                 table.insert(conds, self:binary(k, v)) |                 table.insert(conds, self:binary(k, v)) | ||||||
|             end |             end | ||||||
|         end |         end | ||||||
|  |     end | ||||||
|  |  | ||||||
|     return string.format("(%s)", table.concat(conds, op)) |     return string.format("(%s)", table.concat(conds, op)) | ||||||
| end | end | ||||||
|  |  | ||||||
| function SQLQueryGenerator:parse_value(v, types) | function SQLQueryGenerator:parse_value(v, types) | ||||||
|     if not types[type(v)] then |     if not types[type(v)] then | ||||||
|         self:error("Type error: unexpected type %d", type(v)) |         self:error("Type error: unexpected type %s", type(v)) | ||||||
|     end |     end | ||||||
|     if type(v) == "number" then |     if type(v) == "number" then | ||||||
|         return tostring(v) |         return tostring(v) | ||||||
|   | |||||||
| @@ -401,6 +401,7 @@ test("SQL Generator", function() | |||||||
|             user = "dany'", |             user = "dany'", | ||||||
|             ["$or"] = { |             ["$or"] = { | ||||||
|                 email = "test@mail.com", |                 email = "test@mail.com", | ||||||
|  |                 age = {10,20,30,40}, | ||||||
|                 ["age$ne"] = 30, |                 ["age$ne"] = 30, | ||||||
|                 ["$and"] = { |                 ["$and"] = { | ||||||
|                     ["birth$ne"] = 1986, |                     ["birth$ne"] = 1986, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user