Files
2026-04-14 01:21:54 +00:00

167 lines
3.3 KiB
Go

package query
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestPostgreSQLDialect_EscapeIdentifier(t *testing.T) {
dialect := NewPostgreSQLDialect()
testCases := []struct {
name string
input string
expected string
}{
{
name: "Simple lowercase",
input: "users",
expected: `"users"`,
},
{
name: "PascalCase with underscore",
input: "Nama_device",
expected: `"Nama_device"`,
},
{
name: "PascalCase",
input: "Tahun",
expected: `"Tahun"`,
},
{
name: "Schema and table",
input: "role_access.rol_permission",
expected: `"role_access"."rol_permission"`,
},
{
name: "Wildcard should not be escaped",
input: "*",
expected: `*`,
},
{
name: "Identifier with quotes inside",
input: `user"s`,
expected: `"user""s"`,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := dialect.EscapeIdentifier(tc.input)
assert.Equal(t, tc.expected, result)
})
}
}
func TestMySQLDialect_EscapeIdentifier(t *testing.T) {
dialect := NewMySQLDialect()
testCases := []struct {
name string
input string
expected string
}{
{
name: "Simple lowercase",
input: "users",
expected: "`users`",
},
{
name: "PascalCase with underscore",
input: "Nama_device",
expected: "`Nama_device`",
},
{
name: "PascalCase",
input: "Tahun",
expected: "`Tahun`",
},
{
name: "Schema and table",
input: "role_access.rol_permission",
expected: "`role_access`.`rol_permission`",
},
{
name: "Wildcard should not be escaped",
input: "*",
expected: `*`,
},
{
name: "Identifier with backticks inside",
input: "user`s",
expected: "`user``s`",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := dialect.EscapeIdentifier(tc.input)
assert.Equal(t, tc.expected, result)
})
}
}
func TestSQLServerDialect_EscapeIdentifier(t *testing.T) {
dialect := NewSQLServerDialect()
testCases := []struct {
name string
input string
expected string
}{
{
name: "Simple lowercase",
input: "users",
expected: "[users]",
},
{
name: "PascalCase with underscore",
input: "Nama_device",
expected: "[Nama_device]",
},
{
name: "PascalCase",
input: "Tahun",
expected: "[Tahun]",
},
{
name: "Schema and table",
input: "role_access.rol_permission",
expected: "[role_access].[rol_permission]",
},
{
name: "Wildcard should not be escaped",
input: "*",
expected: `*`,
},
{
name: "Identifier with brackets inside",
input: "user]s",
expected: "[user]]s]",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
result := dialect.EscapeIdentifier(tc.input)
assert.Equal(t, tc.expected, result)
})
}
}
func TestSQLiteDialect_EscapeIdentifier(t *testing.T) {
dialect := NewSQLiteDialect()
// SQLite uses the same quoting as PostgreSQL
t.Run("PascalCase with underscore", func(t *testing.T) {
result := dialect.EscapeIdentifier("Nama_device")
assert.Equal(t, `"Nama_device"`, result)
})
t.Run("Schema and table", func(t *testing.T) {
result := dialect.EscapeIdentifier("role_access.rol_permission")
assert.Equal(t, `"role_access"."rol_permission"`, result)
})
}