Documentation
¶
Index ¶
- Constants
- func WithCollectCommands(collectCommands bool) normalizerOption
- func WithCollectComments(collectComments bool) normalizerOption
- func WithCollectProcedures(collectProcedure bool) normalizerOption
- func WithCollectTables(collectTables bool) normalizerOption
- func WithDBMS(dbms DBMSType) lexerOption
- func WithDollarQuotedFunc(dollarQuotedFunc bool) obfuscatorOption
- func WithKeepIdentifierQuotation(keepIdentifierQuotation bool) normalizerOption
- func WithKeepJsonPath(keepJsonPath bool) obfuscatorOption
- func WithKeepSQLAlias(keepSQLAlias bool) normalizerOption
- func WithKeepTrailingSemicolon(keepTrailingSemicolon bool) normalizerOption
- func WithRemoveSpaceBetweenParentheses(removeSpaceBetweenParentheses bool) normalizerOption
- func WithReplaceBindParameter(replaceBindParameter bool) obfuscatorOption
- func WithReplaceBoolean(replaceBoolean bool) obfuscatorOption
- func WithReplaceDigits(replaceDigits bool) obfuscatorOption
- func WithReplaceNull(replaceNull bool) obfuscatorOption
- func WithReplacePositionalParameter(replacePositionalParameter bool) obfuscatorOption
- func WithUppercaseKeywords(uppercaseKeywords bool) normalizerOption
- type DBMSType
- type LastValueToken
- type Lexer
- type LexerConfig
- type Normalizer
- type Obfuscator
- type StatementMetadata
- type Token
- type TokenType
Examples ¶
Constants ¶
View Source
const ( StringPlaceholder = "?" NumberPlaceholder = "?" )
Variables ¶
This section is empty.
Functions ¶
func WithCollectCommands ¶
func WithCollectCommands(collectCommands bool) normalizerOption
func WithCollectComments ¶
func WithCollectComments(collectComments bool) normalizerOption
func WithCollectProcedures ¶ added in v0.0.7
func WithCollectProcedures(collectProcedure bool) normalizerOption
func WithCollectTables ¶
func WithCollectTables(collectTables bool) normalizerOption
func WithDollarQuotedFunc ¶
func WithDollarQuotedFunc(dollarQuotedFunc bool) obfuscatorOption
func WithKeepIdentifierQuotation ¶ added in v0.0.9
func WithKeepIdentifierQuotation(keepIdentifierQuotation bool) normalizerOption
func WithKeepJsonPath ¶ added in v0.0.15
func WithKeepJsonPath(keepJsonPath bool) obfuscatorOption
func WithKeepSQLAlias ¶
func WithKeepSQLAlias(keepSQLAlias bool) normalizerOption
func WithKeepTrailingSemicolon ¶ added in v0.0.9
func WithKeepTrailingSemicolon(keepTrailingSemicolon bool) normalizerOption
func WithRemoveSpaceBetweenParentheses ¶ added in v0.0.8
func WithRemoveSpaceBetweenParentheses(removeSpaceBetweenParentheses bool) normalizerOption
func WithReplaceBindParameter ¶ added in v0.0.18
func WithReplaceBindParameter(replaceBindParameter bool) obfuscatorOption
func WithReplaceBoolean ¶ added in v0.0.3
func WithReplaceBoolean(replaceBoolean bool) obfuscatorOption
func WithReplaceDigits ¶
func WithReplaceDigits(replaceDigits bool) obfuscatorOption
func WithReplaceNull ¶ added in v0.0.3
func WithReplaceNull(replaceNull bool) obfuscatorOption
func WithReplacePositionalParameter ¶ added in v0.0.3
func WithReplacePositionalParameter(replacePositionalParameter bool) obfuscatorOption
func WithUppercaseKeywords ¶ added in v0.0.2
func WithUppercaseKeywords(uppercaseKeywords bool) normalizerOption
Types ¶
type DBMSType ¶ added in v0.0.2
type DBMSType string
const ( // DBMSSQLServer is a MS SQL DBMSSQLServer DBMSType = "mssql" DBMSSQLServerAlias1 DBMSType = "sql-server" // .Net tracer DBMSSQLServerAlias2 DBMSType = "sqlserver" // Java tracer // DBMSPostgres is a PostgreSQL Server DBMSPostgres DBMSType = "postgresql" DBMSPostgresAlias1 DBMSType = "postgres" // Ruby, JavaScript tracers // DBMSMySQL is a MySQL Server DBMSMySQL DBMSType = "mysql" // DBMSOracle is a Oracle Server DBMSOracle DBMSType = "oracle" // DBMSSnowflake is a Snowflake Server DBMSSnowflake DBMSType = "snowflake" )
type LastValueToken ¶ added in v0.1.0
type Lexer ¶
type Lexer struct {
// contains filtered or unexported fields
}
SQL Lexer inspired from Rob Pike's talk on Lexical Scanning in Go
Example ¶
query := "SELECT * FROM users WHERE id = 1" lexer := New(query) // Print tokens one by one for { token := lexer.Scan() if token.Type == EOF { break } fmt.Println(token) }
Output:
type LexerConfig ¶ added in v0.0.2
type LexerConfig struct {
DBMS DBMSType `json:"dbms,omitempty"`
}
type Normalizer ¶
type Normalizer struct {
// contains filtered or unexported fields
}
Example ¶
normalizer := NewNormalizer( WithCollectComments(true), WithCollectCommands(true), WithCollectTables(true), WithCollectProcedures(true), WithKeepSQLAlias(false), ) normalizedSQL, statementMetadata, _ := normalizer.Normalize( ` /* this is a comment */ SELECT * FROM users WHERE id in (?, ?) `, ) fmt.Println(normalizedSQL) fmt.Println(statementMetadata)
Output: SELECT * FROM users WHERE id in ( ? ) &{34 [users] [/* this is a comment */] [SELECT] []}
func NewNormalizer ¶
func NewNormalizer(opts ...normalizerOption) *Normalizer
func (*Normalizer) Normalize ¶
func (n *Normalizer) Normalize(input string, lexerOpts ...lexerOption) (normalizedSQL string, statementMetadata *StatementMetadata, err error)
type Obfuscator ¶
type Obfuscator struct {
// contains filtered or unexported fields
}
Example ¶
obfuscator := NewObfuscator() obfuscated := obfuscator.Obfuscate("SELECT * FROM users WHERE id = 1") fmt.Println(obfuscated)
Output: SELECT * FROM users WHERE id = ?
func NewObfuscator ¶
func NewObfuscator(opts ...obfuscatorOption) *Obfuscator
func (*Obfuscator) Obfuscate ¶
func (o *Obfuscator) Obfuscate(input string, lexerOpts ...lexerOption) string
Obfuscate takes an input SQL string and returns an obfuscated SQL string. The obfuscator replaces all literal values with a single placeholder
func (*Obfuscator) ObfuscateTokenValue ¶ added in v0.0.3
func (o *Obfuscator) ObfuscateTokenValue(token *Token, lastValueToken *LastValueToken, lexerOpts ...lexerOption)
type StatementMetadata ¶
type StatementMetadata struct { Size int `json:"size"` Tables []string `json:"tables"` Comments []string `json:"comments"` Commands []string `json:"commands"` Procedures []string `json:"procedures"` }
func ObfuscateAndNormalize ¶ added in v0.0.3
func ObfuscateAndNormalize(input string, obfuscator *Obfuscator, normalizer *Normalizer, lexerOpts ...lexerOption) (normalizedSQL string, statementMetadata *StatementMetadata, err error)
ObfuscateAndNormalize takes an input SQL string and returns an normalized SQL string with metadata This function is a convenience function that combines the Obfuscator and Normalizer in one pass
type TokenType ¶
type TokenType int
const ( ERROR TokenType = iota EOF SPACE // space or newline STRING // string literal INCOMPLETE_STRING // incomplete string literal so that we can obfuscate it, e.g. 'abc NUMBER // number literal IDENT // identifier QUOTED_IDENT // quoted identifier OPERATOR // operator WILDCARD // wildcard * COMMENT // comment MULTILINE_COMMENT // multiline comment PUNCTUATION // punctuation DOLLAR_QUOTED_FUNCTION // dollar quoted function DOLLAR_QUOTED_STRING // dollar quoted string POSITIONAL_PARAMETER // numbered parameter BIND_PARAMETER // bind parameter FUNCTION // function SYSTEM_VARIABLE // system variable UNKNOWN // unknown token COMMAND // SQL commands like SELECT, INSERT KEYWORD // Other SQL keywords JSON_OP // JSON operators BOOLEAN // boolean literal NULL // null literal PROC_INDICATOR // procedure indicator CTE_INDICATOR // CTE indicator ALIAS_INDICATOR // alias indicator )
Click to show internal directories.
Click to hide internal directories.