package main import ( "fmt" "strings" "github.com/DataDog/go-sqllexer" ) type QueryType int const ( NONE QueryType = iota SELECT UPDATE INSERT DELETE ) type Query struct { Type QueryType FullSql string IsValid bool } func IsTokenEndOfStatement(token *sqllexer.Token) bool { return (token.Type == sqllexer.EOF || token.Value == ";") } func GetQueryTypeFromToken(token *sqllexer.Token) QueryType { if token.Type != sqllexer.COMMAND { return NONE } var foundType QueryType switch strings.ToUpper(token.Value) { case "SELECT": foundType = SELECT case "UPDATE": foundType = UPDATE case "INSERT": foundType = INSERT case "DELETE": foundType = DELETE default: foundType = NONE } return foundType } func IsCrudSqlStatement(token *sqllexer.Token) bool { queryType := GetQueryTypeFromToken(token) return (queryType > 0 && queryType <= 4) // TODO: Update if QueryTypes Change } func GetQueryTypeFromSql(sql string) QueryType { var queryType QueryType lexer := sqllexer.New(sql) for { token := lexer.Scan() if IsTokenEndOfStatement(token) { break } queryType = GetQueryTypeFromToken(token) if queryType > 0 { break } } return queryType } func main() { query := "DELETE * FROM users \n WHERE id = something AND SELECT;" newQuery := GetQueryTypeFromSql(query) fmt.Println(newQuery) //lexer := sqllexer.New(query) //for { // token := lexer.Scan() // fmt.Println(token.Value, token.Type) // if token.Type == sqllexer.EOF { // break // } //} }