Skip to content

Commit 1bdd2f4

Browse files
committed
*: change LowerCaseTableNames type to int and add some test cases #725
[summary] 1.lower-case-table-names: If set 0, table names are stored as specified and comparisons are case-sensitive. If set 1, table names are stored in lowercase on disk and comparisons are not case-sensitive. 2.Add some test cases. [test case] src/ctl/v1/radon_test.go src/proxy/initdb_test.go src/proxy/proxy_test.go src/proxy/query_test.go [patch codecov] src/ctl/v1/radon.go 92.8% src/proxy/proxy.go 86.5% src/proxy/spanner.go 95.2%
1 parent d9d9b85 commit 1bdd2f4

File tree

11 files changed

+155
-28
lines changed

11 files changed

+155
-28
lines changed

docs/api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Request: {
6565
"audit-mode": The audit log mode, "N": disabled, "R": read enabled, "W": write enabled, "A": read/write enabled,
6666
"blocks-readonly": The size of a block when create hash tables,
6767
"load-balance": Enables(0 or 1) load balance, for read-write separation,
68-
"lower-case-table-names": If set false, table names are stored as specified and comparisons are case-sensitive, else not case-sensitive.
68+
"lower-case-table-names": If set 0, table names are stored as specified and comparisons are case-sensitive. If set 1, not case-sensitive.
6969
}
7070
7171
```

intergration/radon-test/r/select.result

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@ sum(a) b
2929
select c from integrate_test.t;
3030
ERROR 1054 (42S22): Unknown column 'c' in 'field list'
3131

32+
select a from integrate_test.T;
33+
ERROR 1146 (42S02): Table 'T' doesn't exist
34+
35+
select a from INTEGRATE_TEST.t;
36+
ERROR 1146 (42S02): Table 'INTEGRATE_TEST.t' doesn't exist
37+
38+
select tt.a from integrate_test.t as TT;
39+
ERROR 1105 (HY000): unsupported: unknown.column.'tt.a'.in.field.list
40+
3241

3342
create table integrate_test.s(a int key, b int) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3443

intergration/radon-test/t/select.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ select a, b c from integrate_test.t where a in (0,1,2) order by C desc;
88
select a, b from integrate_test.t where A>0;
99
select sum(a), b from integrate_test.t where a>=0 group by B;
1010
select c from integrate_test.t;
11+
select a from integrate_test.T;
12+
select a from INTEGRATE_TEST.t;
13+
select tt.a from integrate_test.t as TT;
1114

1215
create table integrate_test.s(a int key, b int) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1316
insert into integrate_test.s(a, b) values(0,1), (2,2);

src/config/config.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ type ProxyConfig struct {
2828
MetaDir string `json:"meta-dir"`
2929
Endpoint string `json:"endpoint"`
3030
TwopcEnable bool `json:"twopc-enable"`
31-
LoadBalance int `json:"load-balance"` // 0 -- disable balance, 1 -- enable balance to replica
32-
LowerCaseTableNames bool `json:"lower-case-table-names"`
31+
LoadBalance int `json:"load-balance"` // 0 -- disable balance, 1 -- enable balance to replica
32+
LowerCaseTableNames int `json:"lower-case-table-names"` // 0 -- case sensitive, 1 -- case insensitive
3333

3434
MaxConnections int `json:"max-connections"`
3535
MaxResultSize int `json:"max-result-size"`
@@ -49,18 +49,19 @@ type ProxyConfig struct {
4949
// DefaultProxyConfig returns default proxy config.
5050
func DefaultProxyConfig() *ProxyConfig {
5151
return &ProxyConfig{
52-
MetaDir: "./radon-meta",
53-
Endpoint: "127.0.0.1:3308",
54-
LoadBalance: 0,
55-
MaxConnections: 1024,
56-
MaxResultSize: 1024 * 1024 * 1024, // 1GB
57-
MaxJoinRows: 32768,
58-
DDLTimeout: 10 * 3600 * 1000, // 10hours
59-
QueryTimeout: 5 * 60 * 1000, // 5minutes
60-
PeerAddress: "127.0.0.1:8080",
61-
LongQueryTime: 5, // 5 seconds
62-
StreamBufferSize: 1024 * 1024 * 32, // 32MB
63-
IdleTxnTimeout: 60, // 60 seconds
52+
MetaDir: "./radon-meta",
53+
Endpoint: "127.0.0.1:3308",
54+
LoadBalance: 0,
55+
LowerCaseTableNames: 0,
56+
MaxConnections: 1024,
57+
MaxResultSize: 1024 * 1024 * 1024, // 1GB
58+
MaxJoinRows: 32768,
59+
DDLTimeout: 10 * 3600 * 1000, // 10hours
60+
QueryTimeout: 5 * 60 * 1000, // 5minutes
61+
PeerAddress: "127.0.0.1:8080",
62+
LongQueryTime: 5, // 5 seconds
63+
StreamBufferSize: 1024 * 1024 * 32, // 32MB
64+
IdleTxnTimeout: 60, // 60 seconds
6465
}
6566
}
6667

src/ctl/v1/radon.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type radonParams struct {
2929
AuditMode *string `json:"audit-mode"`
3030
StreamBufferSize *int `json:"stream-buffer-size"`
3131
Blocks *int `json:"blocks-readonly"`
32-
LowerCaseTableNames *bool `json:"lower-case-table-names"`
32+
LowerCaseTableNames *int `json:"lower-case-table-names"`
3333
}
3434

3535
// RadonConfigHandler impl.

src/ctl/v1/radon_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestCtlV1RadonConfig(t *testing.T) {
4747
AuditMode string `json:"audit-mode"`
4848
StreamBufferSize int `json:"stream-buffer-size"`
4949
Blocks int `json:"blocks-readonly"`
50-
LowerCaseTableNames bool `json:"lower-case-table-names"`
50+
LowerCaseTableNames int `json:"lower-case-table-names"`
5151
}
5252

5353
// 200.
@@ -64,7 +64,7 @@ func TestCtlV1RadonConfig(t *testing.T) {
6464
AuditMode: "A",
6565
StreamBufferSize: 16777216,
6666
Blocks: 128,
67-
LowerCaseTableNames: true,
67+
LowerCaseTableNames: 1,
6868
}
6969
recorded := test.RunRequest(t, handler, test.MakeSimpleRequest("PUT", "http://localhost/v1/radon/config", p))
7070
recorded.CodeIs(200)
@@ -81,7 +81,7 @@ func TestCtlV1RadonConfig(t *testing.T) {
8181
assert.Equal(t, "A", radonConf.Audit.Mode)
8282
assert.Equal(t, 16777216, radonConf.Proxy.StreamBufferSize)
8383
assert.Equal(t, 128, radonConf.Router.Blocks)
84-
assert.Equal(t, true, radonConf.Proxy.LowerCaseTableNames)
84+
assert.Equal(t, 1, radonConf.Proxy.LowerCaseTableNames)
8585
}
8686

8787
// Unset AllowIP.

src/proxy/initdb_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func TestProxyUseDatabase(t *testing.T) {
4242
spanner.ComInitDB(session, "TEST")
4343
assert.Equal(t, "TEST", session.Schema())
4444

45-
proxy.SetLowerCaseTableNames(true)
45+
proxy.SetLowerCaseTableNames(1)
4646
spanner.ComInitDB(session, "TEST")
4747
assert.Equal(t, "test", session.Schema())
4848
}

src/proxy/proxy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ func (p *Proxy) SetBlocks(blocks int) {
316316
}
317317

318318
// SetLowerCaseTableNames used to set LowerCaseTableNames to false or true.
319-
func (p *Proxy) SetLowerCaseTableNames(lowerCase bool) {
319+
func (p *Proxy) SetLowerCaseTableNames(lowerCase int) {
320320
p.mu.Lock()
321321
defer p.mu.Unlock()
322322
p.log.Info("proxy.SetLowerCaseTableNames:[%v->%v]", p.conf.Proxy.LowerCaseTableNames, lowerCase)

src/proxy/proxy_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,10 @@ func TestProxy1(t *testing.T) {
107107

108108
// SetLowerCaseTableNames.
109109
{
110-
proxy.SetLowerCaseTableNames(true)
111-
assert.Equal(t, true, proxy.conf.Proxy.LowerCaseTableNames)
112-
proxy.SetLowerCaseTableNames(false)
113-
assert.Equal(t, false, proxy.conf.Proxy.LowerCaseTableNames)
110+
proxy.SetLowerCaseTableNames(1)
111+
assert.Equal(t, 1, proxy.conf.Proxy.LowerCaseTableNames)
112+
proxy.SetLowerCaseTableNames(0)
113+
assert.Equal(t, 0, proxy.conf.Proxy.LowerCaseTableNames)
114114
}
115115

116116
// FlushConfig.

src/proxy/query_test.go

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,18 +739,46 @@ func TestProxyLowerCase(t *testing.T) {
739739
fakedbs, proxy, cleanup := MockProxy(log)
740740
defer cleanup()
741741
address := proxy.Address()
742-
proxy.SetLowerCaseTableNames(true)
742+
743+
r1 := &sqltypes.Result{
744+
Fields: []*querypb.Field{
745+
{
746+
Name: "table",
747+
Type: querypb.Type_VARCHAR,
748+
},
749+
{
750+
Name: "create table",
751+
Type: querypb.Type_VARCHAR,
752+
},
753+
},
754+
Rows: [][]sqltypes.Value{
755+
{
756+
sqltypes.MakeTrusted(querypb.Type_VARCHAR, []byte("t1")),
757+
sqltypes.MakeTrusted(querypb.Type_VARCHAR, []byte("create table t1")),
758+
},
759+
},
760+
}
743761

744762
// fakedbs.
745763
{
746764
fakedbs.AddQueryPattern("create .*", &sqltypes.Result{})
765+
fakedbs.AddQueryPattern("insert .*", &sqltypes.Result{})
766+
fakedbs.AddQueryPattern("delete .*", &sqltypes.Result{})
767+
fakedbs.AddQueryPattern("update .*", &sqltypes.Result{})
747768
fakedbs.AddQueryPattern("select .*", &sqltypes.Result{})
769+
fakedbs.AddQueryPattern("use .*", &sqltypes.Result{})
770+
fakedbs.AddQueryPattern("show create .*", r1)
771+
}
772+
773+
{
774+
proxy.SetLowerCaseTableNames(1)
748775
}
749776

750777
// create database.
751778
{
752779
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
753780
assert.Nil(t, err)
781+
defer client.Close()
754782
query := "create database TEST"
755783
_, err = client.FetchAll(query, -1)
756784
assert.Nil(t, err)
@@ -760,17 +788,100 @@ func TestProxyLowerCase(t *testing.T) {
760788
{
761789
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
762790
assert.Nil(t, err)
791+
defer client.Close()
763792
query := "create table test.T1(id int, b int) partition by hash(id)"
764793
_, err = client.FetchAll(query, -1)
765794
assert.Nil(t, err)
766795
}
767796

797+
// insert.
798+
{
799+
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
800+
assert.Nil(t, err)
801+
defer client.Close()
802+
query := "insert into Test.t1(id,b) values(1,1)"
803+
_, err = client.FetchAll(query, -1)
804+
assert.Nil(t, err)
805+
}
806+
807+
// update.
808+
{
809+
client, err := driver.NewConn("mock", "mock", address, "test", "utf8")
810+
assert.Nil(t, err)
811+
defer client.Close()
812+
query := "update t1 set b=2 where id=1"
813+
_, err = client.FetchAll(query, -1)
814+
assert.Nil(t, err)
815+
}
816+
817+
// select.
818+
{
819+
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
820+
assert.Nil(t, err)
821+
defer client.Close()
822+
query := "select * from tEst.t1 as T where t.b=2"
823+
_, err = client.FetchAll(query, -1)
824+
assert.Nil(t, err)
825+
}
826+
827+
// delete.
828+
{
829+
client, err := driver.NewConn("mock", "mock", address, "TEST", "utf8")
830+
assert.Nil(t, err)
831+
defer client.Close()
832+
query := "delete from t1 where T1.id=1"
833+
_, err = client.FetchAll(query, -1)
834+
assert.Nil(t, err)
835+
}
836+
837+
// show.
838+
{
839+
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
840+
assert.Nil(t, err)
841+
defer client.Close()
842+
query := "show create table test.t1"
843+
_, err = client.FetchAll(query, -1)
844+
assert.Nil(t, err)
845+
}
846+
847+
// lower_case_table_names=0
848+
{
849+
proxy.SetLowerCaseTableNames(0)
850+
}
851+
768852
// select.
769853
{
770854
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
771855
assert.Nil(t, err)
772-
query := "select * from test.t1"
856+
defer client.Close()
857+
query := "select * from test.t1 as t where t.b=2"
773858
_, err = client.FetchAll(query, -1)
774859
assert.Nil(t, err)
775860
}
861+
862+
// select error 1.
863+
{
864+
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
865+
assert.Nil(t, err)
866+
defer client.Close()
867+
query := "select * from TEST.T1 as t where t.b=2"
868+
_, err = client.FetchAll(query, -1)
869+
assert.NotNil(t, err)
870+
want := "Table 'TEST.T1' doesn't exist (errno 1146) (sqlstate 42S02)"
871+
got := err.Error()
872+
assert.Equal(t, want, got)
873+
}
874+
875+
// select error 2.
876+
{
877+
client, err := driver.NewConn("mock", "mock", address, "", "utf8")
878+
assert.Nil(t, err)
879+
defer client.Close()
880+
query := "select * from test.t1 as T where t.b=2"
881+
_, err = client.FetchAll(query, -1)
882+
assert.NotNil(t, err)
883+
want := "unsupported: unknown.column.'t.b'.in.clause (errno 1105) (sqlstate HY000)"
884+
got := err.Error()
885+
assert.Equal(t, want, got)
886+
}
776887
}

0 commit comments

Comments
 (0)