コード例 #1
0
    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!'''
コード例 #2
0
 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!'
コード例 #3
0
    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!'''
コード例 #4
0
    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 + ';'