Skip to content

Commit 3527807

Browse files
committed
fingerpint helper
1 parent 4e667e5 commit 3527807

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

pkg/sql/parserutils/utils.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,22 @@ var ParseQualifiedTableName = func(sql string) (*tree.TableName, error) {
105105
var PLpgSQLParse = func(sql string) (statements.PLpgStatement, error) {
106106
return statements.PLpgStatement{}, errors.AssertionFailedf("sql.DoParserInjection hasn't been called")
107107
}
108+
109+
// FingerprintStatement parses a SQL string and converts it to a statement
110+
// fingerprint. If the input is already a fingerprint, it is returned as-is.
111+
// The optional extraFlags are OR'd into the default FmtHideConstants flags used
112+
// for fingerprinting.
113+
func FingerprintStatement(sql string, extraFlags ...tree.FmtFlags) (string, error) {
114+
stmts, err := Parse(sql)
115+
if err != nil {
116+
return "", pgerror.Wrapf(
117+
err, pgcode.InvalidParameterValue, "could not parse statement",
118+
)
119+
}
120+
if len(stmts) != 1 {
121+
return "", pgerror.Newf(
122+
pgcode.InvalidParameterValue, "could not parse as a single SQL statement",
123+
)
124+
}
125+
return tree.FormatStatementHideConstants(stmts[0].AST, extraFlags...), nil
126+
}

0 commit comments

Comments
 (0)