@@ -370,7 +370,7 @@ def getTables(self, bruteForce=None):
370370
371371 return kb .data .cachedTables
372372
373- def getColumns (self , onlyColNames = False , colTuple = None , bruteForce = None ):
373+ def getColumns (self , onlyColNames = False , colTuple = None , bruteForce = None , dumpMode = False ):
374374 self .forceDbmsEnum ()
375375
376376 if conf .db is None or conf .db == CURRENT_DB :
@@ -517,10 +517,6 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None):
517517 condQueryStr = "%%s%s" % colCondParam
518518 condQuery = " AND (%s)" % " OR " .join (condQueryStr % (condition , unsafeSQLIdentificatorNaming (col )) for col in sorted (colList ))
519519
520- infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming (tbl )
521- infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming (conf .db )
522- logger .info (infoMsg )
523-
524520 if Backend .getIdentifiedDbms () in (DBMS .MYSQL , DBMS .PGSQL , DBMS .HSQLDB ):
525521 query = rootQuery .inband .query % (unsafeSQLIdentificatorNaming (tbl ), unsafeSQLIdentificatorNaming (conf .db ))
526522 query += condQuery
@@ -534,7 +530,14 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None):
534530 elif Backend .getIdentifiedDbms () in (DBMS .SQLITE , DBMS .FIREBIRD ):
535531 query = rootQuery .inband .query % tbl
536532
537- values = inject .getValue (query , blind = False , time = False )
533+ if dumpMode and colList :
534+ values = [(_ ,) for _ in colList ]
535+ else :
536+ infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming (tbl )
537+ infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming (conf .db )
538+ logger .info (infoMsg )
539+
540+ values = inject .getValue (query , blind = False , time = False )
538541
539542 if Backend .isDbms (DBMS .MSSQL ) and isNoneValue (values ):
540543 index , values = 1 , []
@@ -612,10 +615,6 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None):
612615 condQueryStr = "%%s%s" % colCondParam
613616 condQuery = " AND (%s)" % " OR " .join (condQueryStr % (condition , unsafeSQLIdentificatorNaming (col )) for col in sorted (colList ))
614617
615- infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming (tbl )
616- infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming (conf .db )
617- logger .info (infoMsg )
618-
619618 if Backend .getIdentifiedDbms () in (DBMS .MYSQL , DBMS .PGSQL , DBMS .HSQLDB ):
620619 query = rootQuery .blind .count % (unsafeSQLIdentificatorNaming (tbl ), unsafeSQLIdentificatorNaming (conf .db ))
621620 query += condQuery
@@ -639,22 +638,31 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None):
639638 parseSqliteTableSchema (value )
640639 return kb .data .cachedColumns
641640
642- count = inject .getValue (query , union = False , error = False , expected = EXPECTED .INT , charsetType = CHARSET_TYPE .DIGITS )
643-
644641 table = {}
645642 columns = {}
646643
647- if not isNumPosStrValue (count ):
648- if Backend .isDbms (DBMS .MSSQL ):
649- count , index , values = 0 , 1 , []
650- while True :
651- query = rootQuery .blind .query3 % (conf .db , tbl , index )
652- value = unArrayizeValue (inject .getValue (query , union = False , error = False ))
653- if isNoneValue (value ) or value == " " :
654- break
655- else :
656- columns [safeSQLIdentificatorNaming (value )] = None
657- index += 1
644+ if dumpMode and colList :
645+ count = 0
646+ for value in colList :
647+ columns [safeSQLIdentificatorNaming (value )] = None
648+ else :
649+ infoMsg += "for table '%s' " % unsafeSQLIdentificatorNaming (tbl )
650+ infoMsg += "in database '%s'" % unsafeSQLIdentificatorNaming (conf .db )
651+ logger .info (infoMsg )
652+
653+ count = inject .getValue (query , union = False , error = False , expected = EXPECTED .INT , charsetType = CHARSET_TYPE .DIGITS )
654+
655+ if not isNumPosStrValue (count ):
656+ if Backend .isDbms (DBMS .MSSQL ):
657+ count , index , values = 0 , 1 , []
658+ while True :
659+ query = rootQuery .blind .query3 % (conf .db , tbl , index )
660+ value = unArrayizeValue (inject .getValue (query , union = False , error = False ))
661+ if isNoneValue (value ) or value == " " :
662+ break
663+ else :
664+ columns [safeSQLIdentificatorNaming (value )] = None
665+ index += 1
658666
659667 if not columns :
660668 errMsg = "unable to retrieve the %scolumns " % ("number of " if not Backend .isDbms (DBMS .MSSQL ) else "" )
0 commit comments