comparison ZDBInterfaceFolder.py @ 7:917e28a08c58

search case insensitive. max and skip options.
author casties
date Tue, 15 Feb 2011 21:14:03 +0100
parents ca30cf0e810d
children 17b19345d011
comparison
equal deleted inserted replaced
6:1b25a85a2165 7:917e28a08c58
41 select = "*" 41 select = "*"
42 order = None 42 order = None
43 wheres = [] 43 wheres = []
44 whereOp = "AND" 44 whereOp = "AND"
45 done = {} 45 done = {}
46 limit = None
47 offset = None
46 48
47 def doOp(op, param, val): 49 def doOp(op, param, val):
48 # handles comparison operations in WHERE clause 50 # handles comparison operations in WHERE clause
51 logging.debug("doop op=%s param=%s val=%s"%(op,param,val))
49 if isinstance(val, list): 52 if isinstance(val, list):
50 # join multiple parameters with spaces (makes sense with checkbox and -op=all) 53 # join multiple parameters with spaces (makes sense with checkbox and -op=all)
51 val = " ".join(val) 54 val = " ".join(val)
52 logging.debug("doop op=%s param=%s val=%s"%(op,param,val)) 55
56 # string comparisons are case-insensitive
57 if isinstance(val, basestring):
58 param = "LOWER(%s)"%param
59 val = val.lower()
60
53 if op == "eq": 61 if op == "eq":
54 wheres.append(param + " = %s") 62 wheres.append(param + " = %s")
55 args.append(val) 63 args.append(val)
56 elif op == "lt": 64 elif op == "lt":
57 wheres.append(param + " < %s") 65 wheres.append(param + " < %s")
58 args.append(val) 66 args.append(val)
59 elif op == "gt": 67 elif op == "gt":
60 wheres.append(param + " > %s") 68 wheres.append(param + " > %s")
61 args.append(val) 69 args.append(val)
62 elif op == "bw": 70 elif op == "bw":
63 wheres.append(param + " LIKE %s") 71 wheres.append(param + " ILIKE %s")
64 args.append("%" + val) 72 args.append("%" + val)
65 elif op == "ew": 73 elif op == "ew":
66 wheres.append(param + " LIKE %s") 74 wheres.append(param + " ILIKE %s")
67 args.append(val + "%") 75 args.append(val + "%")
68 elif op == "ct": 76 elif op == "ct":
69 wheres.append(param + " LIKE %s") 77 wheres.append(param + " ILIKE %s")
70 args.append("%" + val + "%") 78 args.append("%" + val + "%")
71 elif op == "all": 79 elif op == "all":
72 words = [] 80 words = []
73 for word in val.split(" "): 81 for word in val.split(" "):
74 words.append(param + " LIKE %s") 82 words.append(param + " ILIKE %s")
75 args.append("%" + word + "%") 83 args.append("%" + word + "%")
76 wheres.append("(" + " AND ".join(words) + ")") 84 wheres.append("(" + " AND ".join(words) + ")")
85 elif op == "one":
86 words = []
87 for word in val.split(" "):
88 words.append(param + " ILIKE %s")
89 args.append("%" + word + "%")
90 wheres.append("(" + " OR ".join(words) + ")")
77 else: 91 else:
78 logging.error("getSQLquery: unknown op=%s!"%op) 92 logging.error("getSQLquery: unknown op=%s!"%op)
79 93
80 return 94 return
81 95
96 # sort i.e. ORDER BY expression 110 # sort i.e. ORDER BY expression
97 order = sqlName(val, more=",") 111 order = sqlName(val, more=",")
98 elif key == "_lop": 112 elif key == "_lop":
99 # logical operation joining WHERE clauses 113 # logical operation joining WHERE clauses
100 whereOp = sqlName(val) 114 whereOp = sqlName(val)
115 elif key == "max":
116 # number of results
117 limit = sqlName(val)
118 elif key == "skip":
119 # start at result number
120 offset = sqlName(val)
101 elif key[:3] == "_op": 121 elif key[:3] == "_op":
102 # operation parameters _op_param=option 122 # operation parameters _op_param=option
103 param = sqlName(key[4:]) 123 param = sqlName(key[4:])
104 logging.debug("param=%s key=%s val=%s"%(param,key,val)) 124 logging.debug("param=%s key=%s val=%s"%(param,key,val))
105 if param in argv: 125 if param in argv:
121 if wheres: 141 if wheres:
122 query += " WHERE " + (" " + whereOp + " ").join(wheres) 142 query += " WHERE " + (" " + whereOp + " ").join(wheres)
123 143
124 if order: 144 if order:
125 query += " ORDER BY " + order 145 query += " ORDER BY " + order
146
147 if limit:
148 query += " LIMIT " + limit
149
150 if offset:
151 query += " OFFSET " + offset
126 152
127 return {'query' : query, 'args' : args} 153 return {'query' : query, 'args' : args}
128 154
129 def ZDBInlineSearch(self, _table=None, **argv): 155 def ZDBInlineSearch(self, _table=None, **argv):
130 """returns result set from search""" 156 """returns result set from search"""