package sq import ( "context" "git.blackforestbytes.com/BlackForestBytes/goext/tst" "strings" "testing" ) func TestFnTrimCommentsLineOnly(t *testing.T) { // The line-only comment is replaced with an empty line. sql := "SELECT *\n-- this is a comment\nFROM users" pp := PP{} err := fnTrimComments(context.Background(), "QUERY", nil, &sql, &pp) tst.AssertNoErr(t, err) tst.AssertTrue(t, !strings.Contains(sql, "comment")) tst.AssertTrue(t, strings.Contains(sql, "SELECT *")) tst.AssertTrue(t, strings.Contains(sql, "FROM users")) } func TestFnTrimCommentsTrailing(t *testing.T) { sql := "SELECT * -- inline\nFROM users -- end" pp := PP{} err := fnTrimComments(context.Background(), "QUERY", nil, &sql, &pp) tst.AssertNoErr(t, err) tst.AssertEqual(t, "SELECT *\nFROM users", sql) } func TestFnTrimCommentsIndented(t *testing.T) { sql := "SELECT *\n -- indented comment\nFROM users" pp := PP{} err := fnTrimComments(context.Background(), "QUERY", nil, &sql, &pp) tst.AssertNoErr(t, err) tst.AssertTrue(t, !strings.Contains(sql, "indented comment")) tst.AssertTrue(t, strings.Contains(sql, "SELECT *")) tst.AssertTrue(t, strings.Contains(sql, "FROM users")) } func TestFnTrimCommentsTrimsTrailingWhitespace(t *testing.T) { sql := "SELECT * \t\nFROM users " pp := PP{} err := fnTrimComments(context.Background(), "QUERY", nil, &sql, &pp) tst.AssertNoErr(t, err) tst.AssertEqual(t, "SELECT *\nFROM users", sql) } func TestFnTrimCommentsNoComment(t *testing.T) { sql := "SELECT id\nFROM users\nWHERE id=1" pp := PP{} err := fnTrimComments(context.Background(), "QUERY", nil, &sql, &pp) tst.AssertNoErr(t, err) tst.AssertEqual(t, "SELECT id\nFROM users\nWHERE id=1", sql) } func TestFnTrimCommentsEmpty(t *testing.T) { sql := "" pp := PP{} err := fnTrimComments(context.Background(), "QUERY", nil, &sql, &pp) tst.AssertNoErr(t, err) tst.AssertEqual(t, "", sql) } func TestCommentTrimmerListener(t *testing.T) { sql := "SELECT *\n-- a comment\nFROM x" pp := PP{} err := CommentTrimmer.PreQuery(context.Background(), nil, &sql, &pp, PreQueryMeta{}) tst.AssertNoErr(t, err) tst.AssertTrue(t, !strings.Contains(sql, "a comment")) sql2 := "INSERT INTO x VALUES (1) -- xx" err = CommentTrimmer.PreExec(context.Background(), nil, &sql2, &pp, PreExecMeta{}) tst.AssertNoErr(t, err) tst.AssertEqual(t, "INSERT INTO x VALUES (1)", sql2) }