From d596c121d31996a339cfd50ee22e881facb532ab Mon Sep 17 00:00:00 2001 From: fairking Date: Wed, 17 Apr 2024 00:09:10 +0200 Subject: [PATCH 1/6] Alias issue #69 --- builder/buffer.go | 12 ++++++++---- builder/query_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/builder/buffer.go b/builder/buffer.go index e807a62..bdecbe9 100644 --- a/builder/buffer.go +++ b/builder/buffer.go @@ -133,9 +133,6 @@ func (b Buffer) escape(table, value string) string { var escaped_table string if table != "" { - if i := strings.Index(strings.ToLower(table), " as "); i > -1 { - return b.escape(table[:i], "") + " AS " + b.Quoter.ID(table[i+4:]) - } if b.AllowTableSchema && strings.IndexByte(table, '.') >= 0 { parts := strings.Split(table, ".") for i, part := range parts { @@ -143,8 +140,15 @@ func (b Buffer) escape(table, value string) string { parts[i] = b.Quoter.ID(part) } escaped_table = strings.Join(parts, ".") + } else if i := strings.Index(strings.ToLower(table), " as "); i > -1 { + escaped_table = b.escape(table[:i], "") + " AS " + b.Quoter.ID(table[i+4:]) } else { - escaped_table = b.Quoter.ID(strings.ReplaceAll(table, ".", "_")) + parts := strings.Split(table, " ") + for i, part := range parts { + part = strings.TrimSpace(part) + parts[i] = b.Quoter.ID(part) + } + escaped_table = strings.Join(parts, " ") } } diff --git a/builder/query_test.go b/builder/query_test.go index 3c33b18..598f0fe 100644 --- a/builder/query_test.go +++ b/builder/query_test.go @@ -105,6 +105,22 @@ func TestQuery_Build(t *testing.T) { result: "SELECT `users`.* FROM `users` FOR UPDATE;", query: rel.From("users").Lock("FOR UPDATE"), }, + { + result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` `c`;", + query: rel.Select("c.id", "c.name").From("contacts c"), + }, + { + result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` AS `c`;", + query: rel.Select("c.id", "c.name").From("contacts as c"), + }, + { + result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` `c`;", + query: rel.Select("c.id").Select("c.name").From("contacts c"), + }, + { + result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` AS `c`;", + query: rel.Select("c.id").Select("c.name").From("contacts as c"), + }, } for _, test := range tests { @@ -185,6 +201,22 @@ func TestQuery_Build_ordinal(t *testing.T) { result: "SELECT \"users\".* FROM \"users\" FOR UPDATE;", query: rel.From("users").Lock("FOR UPDATE"), }, + { + result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" \"c\";", + query: rel.Select("c.id", "c.name").From("contacts c"), + }, + { + result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" AS \"c\";", + query: rel.Select("c.id", "c.name").From("contacts as c"), + }, + { + result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" \"c\";", + query: rel.Select("c.id").Select("c.name").From("contacts c"), + }, + { + result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" AS \"c\";", + query: rel.Select("c.id").Select("c.name").From("contacts as c"), + }, } for _, test := range tests { From 6f457ccf5d68409fc978ddf83cb884073e771c61 Mon Sep 17 00:00:00 2001 From: fairking <13495631+fairking@users.noreply.github.com> Date: Thu, 18 Apr 2024 23:43:51 +0200 Subject: [PATCH 2/6] Revert changes for Select --- builder/query_test.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/builder/query_test.go b/builder/query_test.go index 598f0fe..1abd6ff 100644 --- a/builder/query_test.go +++ b/builder/query_test.go @@ -113,14 +113,6 @@ func TestQuery_Build(t *testing.T) { result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` AS `c`;", query: rel.Select("c.id", "c.name").From("contacts as c"), }, - { - result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` `c`;", - query: rel.Select("c.id").Select("c.name").From("contacts c"), - }, - { - result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` AS `c`;", - query: rel.Select("c.id").Select("c.name").From("contacts as c"), - }, } for _, test := range tests { @@ -209,14 +201,6 @@ func TestQuery_Build_ordinal(t *testing.T) { result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" AS \"c\";", query: rel.Select("c.id", "c.name").From("contacts as c"), }, - { - result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" \"c\";", - query: rel.Select("c.id").Select("c.name").From("contacts c"), - }, - { - result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" AS \"c\";", - query: rel.Select("c.id").Select("c.name").From("contacts as c"), - }, } for _, test := range tests { From 7ea04adafc2e45e7157b95ce1473b7a79d70a7b7 Mon Sep 17 00:00:00 2001 From: fairking <13495631+fairking@users.noreply.github.com> Date: Fri, 19 Apr 2024 00:40:48 +0200 Subject: [PATCH 3/6] Alias issue refactor escape func and fix failed tests --- builder/buffer.go | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/builder/buffer.go b/builder/buffer.go index bdecbe9..f0d48a8 100644 --- a/builder/buffer.go +++ b/builder/buffer.go @@ -120,6 +120,19 @@ func (b *Buffer) WriteEscape(value string) { b.WriteString(b.escape("", value)) } +func (b Buffer) escape_schema(table string) string { + if b.AllowTableSchema && strings.IndexByte(table, '.') >= 0 { + parts := strings.Split(table, ".") + for i, part := range parts { + part = strings.TrimSpace(part) + parts[i] = b.Quoter.ID(part) + } + return strings.Join(parts, ".") + } else { + return b.Quoter.ID(strings.ReplaceAll(table, ".", "_")) + } +} + func (b Buffer) escape(table, value string) string { if table == "" && value == "*" { return value @@ -133,22 +146,12 @@ func (b Buffer) escape(table, value string) string { var escaped_table string if table != "" { - if b.AllowTableSchema && strings.IndexByte(table, '.') >= 0 { - parts := strings.Split(table, ".") - for i, part := range parts { - part = strings.TrimSpace(part) - parts[i] = b.Quoter.ID(part) - } - escaped_table = strings.Join(parts, ".") - } else if i := strings.Index(strings.ToLower(table), " as "); i > -1 { - escaped_table = b.escape(table[:i], "") + " AS " + b.Quoter.ID(table[i+4:]) + if i := strings.Index(strings.ToLower(table), " as "); i > -1 { + escaped_table = b.escape_schema(table[:i]) + " AS " + b.Quoter.ID(table[i+4:]) + } else if i := strings.Index(strings.ToLower(table), " "); i > -1 { + escaped_table = b.escape_schema(table[:i]) + " " + b.Quoter.ID(table[i+1:]) } else { - parts := strings.Split(table, " ") - for i, part := range parts { - part = strings.TrimSpace(part) - parts[i] = b.Quoter.ID(part) - } - escaped_table = strings.Join(parts, " ") + escaped_table = b.escape_schema(table) } } From e498e85064823aea946a4fe88152e792ef587b67 Mon Sep 17 00:00:00 2001 From: fairking <13495631+fairking@users.noreply.github.com> Date: Fri, 19 Apr 2024 01:29:45 +0200 Subject: [PATCH 4/6] Alias issue Trim spaces just to be more consistent --- builder/buffer.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builder/buffer.go b/builder/buffer.go index f0d48a8..f363187 100644 --- a/builder/buffer.go +++ b/builder/buffer.go @@ -129,7 +129,7 @@ func (b Buffer) escape_schema(table string) string { } return strings.Join(parts, ".") } else { - return b.Quoter.ID(strings.ReplaceAll(table, ".", "_")) + return b.Quoter.ID(strings.ReplaceAll(strings.TrimSpace(table), ".", "_")) } } @@ -147,9 +147,9 @@ func (b Buffer) escape(table, value string) string { var escaped_table string if table != "" { if i := strings.Index(strings.ToLower(table), " as "); i > -1 { - escaped_table = b.escape_schema(table[:i]) + " AS " + b.Quoter.ID(table[i+4:]) + escaped_table = b.escape_schema(table[:i]) + " AS " + b.Quoter.ID(strings.TrimSpace(table[i+4:])) } else if i := strings.Index(strings.ToLower(table), " "); i > -1 { - escaped_table = b.escape_schema(table[:i]) + " " + b.Quoter.ID(table[i+1:]) + escaped_table = b.escape_schema(table[:i]) + " " + b.Quoter.ID(strings.TrimSpace(table[i+1:])) } else { escaped_table = b.escape_schema(table) } From 512c4ae87fab36c5ff9d429add727924b580c9bc Mon Sep 17 00:00:00 2001 From: fairking <13495631+fairking@users.noreply.github.com> Date: Fri, 19 Apr 2024 16:47:15 +0200 Subject: [PATCH 5/6] Alias issue #70 (update escapeSchema method name) --- builder/buffer.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/builder/buffer.go b/builder/buffer.go index f363187..c4a0f99 100644 --- a/builder/buffer.go +++ b/builder/buffer.go @@ -120,7 +120,7 @@ func (b *Buffer) WriteEscape(value string) { b.WriteString(b.escape("", value)) } -func (b Buffer) escape_schema(table string) string { +func (b Buffer) escapeSchema(table string) string { if b.AllowTableSchema && strings.IndexByte(table, '.') >= 0 { parts := strings.Split(table, ".") for i, part := range parts { @@ -147,11 +147,11 @@ func (b Buffer) escape(table, value string) string { var escaped_table string if table != "" { if i := strings.Index(strings.ToLower(table), " as "); i > -1 { - escaped_table = b.escape_schema(table[:i]) + " AS " + b.Quoter.ID(strings.TrimSpace(table[i+4:])) + escaped_table = b.escapeSchema(table[:i]) + " AS " + b.Quoter.ID(strings.TrimSpace(table[i+4:])) } else if i := strings.Index(strings.ToLower(table), " "); i > -1 { - escaped_table = b.escape_schema(table[:i]) + " " + b.Quoter.ID(strings.TrimSpace(table[i+1:])) + escaped_table = b.escapeSchema(table[:i]) + " " + b.Quoter.ID(strings.TrimSpace(table[i+1:])) } else { - escaped_table = b.escape_schema(table) + escaped_table = b.escapeSchema(table) } } From 82fb599ed7ca3aa30a84fbb47451ae16882d4c8a Mon Sep 17 00:00:00 2001 From: fairking <13495631+fairking@users.noreply.github.com> Date: Sat, 20 Apr 2024 00:41:52 +0200 Subject: [PATCH 6/6] Alias issue (remove non as aliases) --- builder/buffer.go | 2 -- builder/query_test.go | 8 -------- 2 files changed, 10 deletions(-) diff --git a/builder/buffer.go b/builder/buffer.go index c4a0f99..53138d3 100644 --- a/builder/buffer.go +++ b/builder/buffer.go @@ -148,8 +148,6 @@ func (b Buffer) escape(table, value string) string { if table != "" { if i := strings.Index(strings.ToLower(table), " as "); i > -1 { escaped_table = b.escapeSchema(table[:i]) + " AS " + b.Quoter.ID(strings.TrimSpace(table[i+4:])) - } else if i := strings.Index(strings.ToLower(table), " "); i > -1 { - escaped_table = b.escapeSchema(table[:i]) + " " + b.Quoter.ID(strings.TrimSpace(table[i+1:])) } else { escaped_table = b.escapeSchema(table) } diff --git a/builder/query_test.go b/builder/query_test.go index 1abd6ff..2dfb45b 100644 --- a/builder/query_test.go +++ b/builder/query_test.go @@ -105,10 +105,6 @@ func TestQuery_Build(t *testing.T) { result: "SELECT `users`.* FROM `users` FOR UPDATE;", query: rel.From("users").Lock("FOR UPDATE"), }, - { - result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` `c`;", - query: rel.Select("c.id", "c.name").From("contacts c"), - }, { result: "SELECT `c`.`id`,`c`.`name` FROM `contacts` AS `c`;", query: rel.Select("c.id", "c.name").From("contacts as c"), @@ -193,10 +189,6 @@ func TestQuery_Build_ordinal(t *testing.T) { result: "SELECT \"users\".* FROM \"users\" FOR UPDATE;", query: rel.From("users").Lock("FOR UPDATE"), }, - { - result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" \"c\";", - query: rel.Select("c.id", "c.name").From("contacts c"), - }, { result: "SELECT \"c\".\"id\",\"c\".\"name\" FROM \"contacts\" AS \"c\";", query: rel.Select("c.id", "c.name").From("contacts as c"),