def test_compact1(self): stream = compact(tokenize(self.sql)) result = Tokens2Unicode(stream) self.assertEqual(result, 'INSERT INTO directories(inode)VALUES(:inode)LIMIT 1')
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')
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')
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'))
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)
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')
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')