Mercurial > hg > ZDBInterface
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""" |