def parse_update(self, collection, arg): args = demjson.decode('[' + arg + ']') conditions = args[0] operators = args[1] if len(operators) == 0: return 'Error: no operator will happen!' sql_set = parse_update_opeators(demjson.encode(operators)) sql_where = parse_condition(conditions) result = '' if 'Error' in sql_set: return sql_set if 'ALTER' not in sql_set and 'INSERT' not in sql_set: if len(args) == 3 and 'multi' in list( args[2]) and args[2]['multi'] is True: return self.generateUpdate(collection, sql_set, sql_where) + ';' else: return self.generateUpdate(collection, sql_set, sql_where) + ' LIMIT 1;' elif 'ALTER' in sql_set and len(args) == 3 and 'multi' in list( args[2]) and args[2]['multi'] is True: if sql_where == 'TRUE': return self.generateAlter(collection, sql_set, sql_where) + ';' else: return "Error:when there is a $unset or $rename operator ,query should be empty." elif 'INSERT' in sql_set and len(args) == 3 and 'upsert' in list( args[2]) and args[2]['upsert'] is True and len( sql_set.split(',')) != 1: return self.generateInsert(collection, sql_set, sql_where) else: return '''Error:the input format is wrong!'''
def parse_replaceOne(self, collection, arg): args = demjson.decode('[' + arg + ']') conditions = args[0] operators = args[1] if len(operators) == 0: return 'Error: no operator will happen!' if '$currentDate' in list(operators) or '$inc' in list(operators) or '$min' in list(operators) or \ '$max' in list(operators) or '$mul' in list(operators) or '$rename' in list(operators) or \ '$set' in list(operators) or '$setOnInsert' in list(operators) or '$unset' in list(operators): return 'Error:replaceOne() cannot use update operators in mongodb.' else: sql_set = parse_update_opeators(demjson.encode(operators)) sql_where = parse_condition(conditions) if 'Error' in sql_set: return sql_set if 'SET' in sql_set: return self.generateUpdate(collection, sql_set, sql_where) + ' LIMIT 1;' else: return 'Error!'
def parse_updateOne(self, collection, arg): args = demjson.decode('[' + arg + ']') conditions = args[0] operators = args[1] if len(operators) == 0: return 'Error: nothing will happen!' if '$rename' in list(operators) or '$unset' in list(operators): return "Error:cannot use $rename or $unset in updateone()" sql_set = parse_update_opeators(demjson.encode(operators)) sql_where = parse_condition(conditions) if 'Error' in sql_set: return sql_set if '$setOnInsert' not in list(operators): return self.generateUpdate(collection, sql_set, sql_where) + ' LIMIT 1 ;' elif len(args) == 3 and len(args[2]) == 1 and list(args[2])[0] == 'upsert' and args[2]['upsert'] is True \ and len(sql_set.split(',')) != 1: return self.generateInsert(collection, sql_set, sql_where)+';' else: return '''Error:the input format is wrong!'''
def parse_findAndModify(self, collection, arg): args = arg.split(',') remove = 0 update = 0 upsert = 0 sql_set = '' sql_where = '' for single_arg in args: index = single_arg.find(':') if 'query' in single_arg: sql_where = parse_condition( demjson.decode(single_arg[index + 1:])) if 'remove' in single_arg and single_arg[index + 1:] == 'true': remove = 1 if 'update' in single_arg: sql_set = parse_update_opeators('{}'.format(single_arg[index + 1:])) update = 1 if 'upsert' in single_arg: upsert = 1 if remove == 1 and update == 0: if sql_where != '': result = 'DELETE FROM {} WHERE {} LIMIT 1'.format( collection, sql_where) else: result = 'DELETE FROM {} LIMIT 1'.format(collection) elif remove == 0 and update == 1 and sql_set != '': if 'Error' in sql_set: return sql_set if "ALTER" in sql_set: return '''Error:$unset and $rename cannot be used in findAndModify().''' elif 'Insert' in sql_set and upsert == 1: result = self.generateInsert(collection, sql_set, sql_where) else: result = self.generateUpdate(collection, sql_set, sql_where) return result + ';'