From 55594d1dbeabef08fb516fcec1fc95a72d624f69 Mon Sep 17 00:00:00 2001 From: tmalaher Date: Fri, 8 May 2020 12:13:13 +0000 Subject: [PATCH 1/3] Oracle uses double quotes for quoting table/column/etc. names (#1674) Oracle uses doulbe quotes for quoting table/column/etc. names Reviewed-on: https://gitea.com/xorm/xorm/pulls/1674 Reviewed-by: Lunny Xiao --- dialects/oracle.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dialects/oracle.go b/dialects/oracle.go index 2620b0bb..91eed251 100644 --- a/dialects/oracle.go +++ b/dialects/oracle.go @@ -500,8 +500,8 @@ var ( } oracleQuoter = schemas.Quoter{ - Prefix: '[', - Suffix: ']', + Prefix: '"', + Suffix: '"', IsReserved: schemas.AlwaysReserve, } ) From d485101331f5957067fb83e227e3d5aedcf24f2d Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Fri, 22 May 2020 02:53:55 +0000 Subject: [PATCH 2/3] chore: improve snakeCasedName performance (#1688) chore: update chore: udpate chore: improve snakeCasedName performance Co-authored-by: Bo-Yi Wu Reviewed-on: https://gitea.com/xorm/xorm/pulls/1688 Reviewed-by: appleboy --- names/mapper.go | 20 +++++++++++++------- names/mapper_test.go | 11 +++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/names/mapper.go b/names/mapper.go index 4aaf0844..80aa48d5 100644 --- a/names/mapper.go +++ b/names/mapper.go @@ -7,6 +7,7 @@ package names import ( "strings" "sync" + "unsafe" ) // Mapper represents a name convertation between struct's fields name and table's column name @@ -77,19 +78,24 @@ func (m SameMapper) Table2Obj(t string) string { type SnakeMapper struct { } +func b2s(b []byte) string { + return *(*string)(unsafe.Pointer(&b)) +} + func snakeCasedName(name string) string { - newstr := make([]rune, 0) - for idx, chr := range name { - if isUpper := 'A' <= chr && chr <= 'Z'; isUpper { - if idx > 0 { + newstr := make([]byte, 0, len(name)+1) + for i := 0; i < len(name); i++ { + c := name[i] + if isUpper := 'A' <= c && c <= 'Z'; isUpper { + if i > 0 { newstr = append(newstr, '_') } - chr -= ('A' - 'a') + c += 'a' - 'A' } - newstr = append(newstr, chr) + newstr = append(newstr, c) } - return string(newstr) + return b2s(newstr) } func (mapper SnakeMapper) Obj2Table(name string) string { diff --git a/names/mapper_test.go b/names/mapper_test.go index 0edfd2a8..5c6dc5d9 100644 --- a/names/mapper_test.go +++ b/names/mapper_test.go @@ -5,6 +5,7 @@ package names import ( + "strings" "testing" ) @@ -47,3 +48,13 @@ func TestGonicMapperToObj(t *testing.T) { } } } + +func BenchmarkSnakeCasedName(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + + s := strings.Repeat("FooBar", 32) + for i := 0; i < b.N; i++ { + _ = snakeCasedName(s) + } +} From f071e5eb9638d1ffaccf4abe8d49d2b95bcb7551 Mon Sep 17 00:00:00 2001 From: appleboy Date: Sat, 23 May 2020 02:22:08 +0000 Subject: [PATCH 3/3] chore: improve titleCasedName performance (#1691) udpate Signed-off-by: Bo-Yi Wu chore: improve titleCasedName performance Signed-off-by: Bo-Yi Wu Co-authored-by: Bo-Yi Wu Reviewed-on: https://gitea.com/xorm/xorm/pulls/1691 --- names/mapper.go | 15 ++++++++------- names/mapper_test.go | 10 ++++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/names/mapper.go b/names/mapper.go index 80aa48d5..79add76e 100644 --- a/names/mapper.go +++ b/names/mapper.go @@ -103,27 +103,28 @@ func (mapper SnakeMapper) Obj2Table(name string) string { } func titleCasedName(name string) string { - newstr := make([]rune, 0) + newstr := make([]byte, 0, len(name)) upNextChar := true name = strings.ToLower(name) - for _, chr := range name { + for i := 0; i < len(name); i++ { + c := name[i] switch { case upNextChar: upNextChar = false - if 'a' <= chr && chr <= 'z' { - chr -= ('a' - 'A') + if 'a' <= c && c <= 'z' { + c -= 'a' - 'A' } - case chr == '_': + case c == '_': upNextChar = true continue } - newstr = append(newstr, chr) + newstr = append(newstr, c) } - return string(newstr) + return b2s(newstr) } func (mapper SnakeMapper) Table2Obj(name string) string { diff --git a/names/mapper_test.go b/names/mapper_test.go index 5c6dc5d9..a39cb569 100644 --- a/names/mapper_test.go +++ b/names/mapper_test.go @@ -58,3 +58,13 @@ func BenchmarkSnakeCasedName(b *testing.B) { _ = snakeCasedName(s) } } + +func BenchmarkTitleCasedName(b *testing.B) { + b.ReportAllocs() + b.ResetTimer() + + s := strings.Repeat("foo_bar", 32) + for i := 0; i < b.N; i++ { + _ = titleCasedName(s) + } +}