29 lines
938 B
Go
29 lines
938 B
Go
package sqllex
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWalkSQLContexts(t *testing.T) {
|
|
sql := `SELECT :x,:x, :x::text, ':hidden', 'it'':hidden', E'it\':hidden', ":hidden", $$:hidden$$, $名$:hidden$名$;
|
|
-- :hidden
|
|
/* :hidden /* :hidden */ :hidden */ SELECT :y, value::integer, x := 1;`
|
|
var names []string
|
|
got := Walk(sql, func(name string) string { names = append(names, name); return "$1 ${2} :inserted" }, nil)
|
|
if strings.Join(names, ",") != ":x,:x,:x,:y" {
|
|
t.Fatalf("parameters: %v", names)
|
|
}
|
|
if strings.Count(got, "$1 ${2} :inserted") != 4 || !strings.Contains(got, "value::integer") {
|
|
t.Fatalf("result: %s", got)
|
|
}
|
|
}
|
|
|
|
func TestUnterminatedSQLContextsAreOpaque(t *testing.T) {
|
|
for _, sql := range []string{"SELECT ':x", `SELECT ":x`, "DO $tag$:x", "/* :x", "-- :x"} {
|
|
if got := Walk(sql, func(string) string { t.Fatal("unexpected parameter"); return "" }, nil); got != sql {
|
|
t.Fatalf("changed %q", sql)
|
|
}
|
|
}
|
|
}
|