Пример #1
0
    def test_compact1(self):
        stream = compact(tokenize(self.sql))

        result = Tokens2Unicode(stream)

        self.assertEqual(result,
                         'INSERT INTO directories(inode)VALUES(:inode)LIMIT 1')
Пример #2
0
    def test_compact2(self):
        stream = tokenize(self.sql2)

        result = compact(stream)

        self.assertEqual(
            Tokens2Unicode(result),
            'SELECT child_entry,asdf AS inode,creation FROM links WHERE '
            'parent_dir==:parent_dir AND name==:name LIMIT 1')
Пример #3
0
 def test_StripWhitespace3(self):
     self.assertEqual(
         Tokens2Unicode(StripWhitespace(tokenize(self.sql3))),
         'SELECT 0 AS st_dev,0 AS st_uid,0 AS st_gid,dir_entries.type AS '
         'st_mode,dir_entries.inode AS st_ino,COUNT(links.child_entry)AS '
         'st_nlink,:creation AS st_ctime,dir_entries.access AS st_atime,'
         'dir_entries.modification AS st_mtime,COALESCE(files.size,0)AS '
         'st_size,COALESCE(files.size,0)AS size FROM dir_entries LEFT JOIN'
         ' files ON dir_entries.inode==files.inode LEFT JOIN links ON '
         'dir_entries.inode==links.child_entry WHERE dir_entries.inode=='
         ':inode GROUP BY dir_entries.inode LIMIT 1')
Пример #4
0
    def test_includeStatement(self):
        stream = tokenize(self.sql)
        includeStatement = IncludeStatement(FILES_DIR,
                                            raiseexceptions=True)
        stream = includeStatement.process(None, stream)
        stream = compact(stream)

        result = Tokens2Unicode(stream)

        self.assertEqual(
            result, (
                'INSERT INTO dir_entries(type)VALUES(:type);INSERT INTO '
                'directories(inode)VALUES(:inode)LIMIT 1'))
Пример #5
0
    def _one_statement(self, method_name, stream, bypass_types):
        """
        Route to the correct optimized function for one statement queries

        :param method_name: the name of the method
        :type method_name: string
        :param stream: the stream of tokens
        :type stream: iterable of tokens
        :param bypass_types: set if parsing should bypass types
        :type bypass_types: boolean
        """
        sql = Tokens2Unicode(stream)

        if self._paramstyle:
            sql = self._paramstyle(sql)

        # Insert statement (return last row id)
        if IsType('INSERT')(stream):
            return self._one_statement_INSERT(method_name, sql, bypass_types)

        ## Update statement (return affected row count)
        #if IsType('UPDATE')(stream):
        #    return self._one_statement_UPDATE(method_name, sql, bypass_types)

        # One-value function (a row of a cell)
        if getlimit(stream) == 1:
            columns = getcolumns(stream)

            # Value function (one row, one field)
            if len(columns) == 1 and columns[0] != '*':
                return self._one_statement_value(method_name, sql, bypass_types)

            # Register function (one row, several fields)
            return self._one_statement_register(method_name, sql, bypass_types)

        # Table function (several rows)
        return self._one_statement_table(method_name, sql, bypass_types)
Пример #6
0
 def test_StripWhitespace2(self):
     self.assertEqual(
         Tokens2Unicode(StripWhitespace(tokenize(self.sql2))),
         'SELECT child_entry,asdf AS inode,creation FROM links WHERE '
         'parent_dir==:parent_dir AND name==:name LIMIT 1')
Пример #7
0
 def test_StripWhitespace1(self):
     self.assertEqual(
         Tokens2Unicode(StripWhitespace(tokenize(self.sql))),
         'INSERT INTO dir_entries(type)VALUES(:type);INSERT INTO '
         'directories(inode)VALUES(:inode)LIMIT 1')