MCPcopy Index your code
hub / github.com/sqlmapproject/sqlmap / getFields

Method getFields

lib/core/agent.py:581–651  ·  view source on GitHub ↗

Take in input a query string and return its fields (columns) and more details. Example: Input: SELECT user, password FROM mysql.user Output: user,password @param query: query to be processed @type query: C{str} @return: query fiel

(self, query)

Source from the content-addressed store, hash-verified

579 return nulledCastedConcatFields
580
581 def getFields(self, query):
582 """
583 Take in input a query string and return its fields (columns) and
584 more details.
585
586 Example:
587
588 Input: SELECT user, password FROM mysql.user
589 Output: user,password
590
591 @param query: query to be processed
592 @type query: C{str}
593
594 @return: query fields (columns) and more details
595 @rtype: C{str}
596 """
597
598 prefixRegex = r"(?:\s+(?:FIRST|SKIP|LIMIT(?: \d+)?)\s+\d+)*"
599 fieldsSelectTop = re.search(r"\ASELECT\s+TOP(\s+\d+|\s*\([^)]+\))\s+(.+?)\s+FROM", query, re.I)
600 fieldsSelectRownum = re.search(r"\ASELECT\s+([^()]+?),\s*ROWNUM AS LIMIT FROM", query, re.I)
601 fieldsSelectDistinct = re.search(r"\ASELECT%s\s+DISTINCT\((.+?)\)\s+FROM" % prefixRegex, query, re.I)
602 fieldsSelectCase = re.search(r"\ASELECT%s\s+(\(CASE WHEN\s+.+\s+END\))" % prefixRegex, query, re.I)
603 fieldsSelectFrom = re.search(r"\ASELECT%s\s+(.+?)\s+FROM " % prefixRegex, query, re.I)
604 fieldsExists = re.search(r"EXISTS\(([^)]*)\)\Z", query, re.I)
605 fieldsSelect = re.search(r"\ASELECT%s\s+(.*)" % prefixRegex, query, re.I)
606 fieldsSubstr = re.search(r"\A(SUBSTR|MID\()", query, re.I)
607 fieldsMinMaxstr = re.search(r"(?:MIN|MAX)\(([^\(\)]+)\)", query, re.I)
608 fieldsNoSelect = query
609
610 _ = zeroDepthSearch(query, " FROM ")
611 if not _:
612 fieldsSelectFrom = None
613
614 if re.search(r"\bWHERE\b.+(MIN|MAX)", query, re.I):
615 fieldsMinMaxstr = None
616
617 fieldsToCastStr = fieldsNoSelect
618
619 if fieldsSubstr:
620 fieldsToCastStr = query
621 elif fieldsMinMaxstr:
622 fieldsToCastStr = fieldsMinMaxstr.group(1)
623 elif fieldsExists:
624 if fieldsSelect:
625 fieldsToCastStr = fieldsSelect.group(1)
626 elif fieldsSelectTop:
627 fieldsToCastStr = fieldsSelectTop.group(2)
628 elif fieldsSelectRownum:
629 fieldsToCastStr = fieldsSelectRownum.group(1)
630 elif fieldsSelectDistinct:
631 if Backend.getDbms() in (DBMS.HSQLDB,):
632 fieldsToCastStr = fieldsNoSelect
633 else:
634 fieldsToCastStr = fieldsSelectDistinct.group(1)
635 elif fieldsSelectCase:
636 fieldsToCastStr = fieldsSelectCase.group(1)
637 elif fieldsSelectFrom:
638 fieldsToCastStr = query[:unArrayizeValue(_)] if _ else query

Callers 8

payloadDirectMethod · 0.95
concatQueryMethod · 0.95
_goInferenceProxyFunction · 0.80
unionUseFunction · 0.80
dnsUseFunction · 0.80
bisectionFunction · 0.80
errorUseFunction · 0.80

Calls 5

zeroDepthSearchFunction · 0.90
unArrayizeValueFunction · 0.90
splitFieldsFunction · 0.90
searchMethod · 0.45
getDbmsMethod · 0.45

Tested by

no test coverage detected