diff --git a/generator/client/golang/templates/queryx/insert.gotmpl b/generator/client/golang/templates/queryx/insert.gotmpl index 4b0244fd..1a552424 100644 --- a/generator/client/golang/templates/queryx/insert.gotmpl +++ b/generator/client/golang/templates/queryx/insert.gotmpl @@ -55,7 +55,7 @@ func (s *InsertStatement) ToSQL() (string, []interface{}) { {{- if eq $.client.Adapter "mysql" }} sql = fmt.Sprintf("%s(`%s`)", sql, strings.Join(s.columns, "`, `")) {{- else }} - sql = fmt.Sprintf("%s(%s)", sql, strings.Join(s.columns, ", ")) + sql = fmt.Sprintf("%s(\"%s\")", sql, strings.Join(s.columns, "\", \"")) {{- end }} } else { {{- if eq $.client.Adapter "mysql" }} diff --git a/generator/client/golang/templates/queryx/insert_test.gotmpl b/generator/client/golang/templates/queryx/insert_test.gotmpl index 3815cc71..c1e49b1a 100644 --- a/generator/client/golang/templates/queryx/insert_test.gotmpl +++ b/generator/client/golang/templates/queryx/insert_test.gotmpl @@ -48,14 +48,14 @@ func TestNewInsert(t *testing.T) { s3 := NewInsert().Into("users").Columns("name", "email").Values("test", "test@example.com") sql, args = s3.ToSQL() - require.Equal(t, "INSERT INTO users(name, email) VALUES (?, ?)", sql) + require.Equal(t, "INSERT INTO users(\"name\", \"email\") VALUES (?, ?)", sql) require.Equal(t, []interface{}{"test", "test@example.com"}, args) s4 := NewInsert().Into("users").Columns("name", "email"). Values("test1", "test1@example.com"). Values("test2", "test2@example.com") sql, args = s4.ToSQL() - require.Equal(t, "INSERT INTO users(name, email) VALUES (?, ?), (?, ?)", sql) + require.Equal(t, "INSERT INTO users(\"name\", \"email\") VALUES (?, ?), (?, ?)", sql) require.Equal(t, []interface{}{"test1", "test1@example.com", "test2", "test2@example.com"}, args) } {{- end }} diff --git a/generator/client/golang/templates/queryx/select_test.go b/generator/client/golang/templates/queryx/select_test.gotmpl similarity index 84% rename from generator/client/golang/templates/queryx/select_test.go rename to generator/client/golang/templates/queryx/select_test.gotmpl index 5c4b8977..eb82ebae 100644 --- a/generator/client/golang/templates/queryx/select_test.go +++ b/generator/client/golang/templates/queryx/select_test.gotmpl @@ -13,7 +13,11 @@ func TestSelect(t *testing.T) { require.Equal(t, []interface{}{}, args) sql, args = s.Update().Columns("name", "email").Values("test", "test@example.com").ToSQL() - require.Equal(t, `UPDATE users SET name = ?, email = ?`, sql) + {{- if eq .client.Adapter "mysql" }} + require.Equal(t, "UPDATE users SET `name` = ?, `email` = ?", sql) + {{- else }} + require.Equal(t, `UPDATE users SET "name" = ?, "email" = ?`, sql) + {{- end }} require.Equal(t, []interface{}{"test", "test@example.com"}, args) s1 := s.Limit(1) diff --git a/generator/client/golang/templates/queryx/update.go_test.gotmpl b/generator/client/golang/templates/queryx/update.go_test.gotmpl new file mode 100644 index 00000000..44603e4c --- /dev/null +++ b/generator/client/golang/templates/queryx/update.go_test.gotmpl @@ -0,0 +1,22 @@ +package queryx + +import ( + "testing" + + "github.com/stretchr/testify/require" +) +{{- if eq .client.Adapter "mysql" }} +func TestNewUpdate(t *testing.T) { + s := NewUpdate().Table("users").Columns("name", "email").Values("test", "test@example.com") + sql, args := s.ToSQL() + require.Equal(t, "UPDATE users SET `name` = ?, `email` = ?", sql) + require.Equal(t, []interface{}{"test", "test@example.com"}, args) +} +{{- else }} +func TestNewUpdate(t *testing.T) { + s := NewUpdate().Table("users").Columns("name", "email").Values("test", "test@example.com") + sql, args := s.ToSQL() + require.Equal(t, `UPDATE users SET "name" = ?, "email" = ?`, sql) + require.Equal(t, []interface{}{"test", "test@example.com"}, args) +} +{{- end }} diff --git a/generator/client/golang/templates/queryx/update.go b/generator/client/golang/templates/queryx/update.gotmpl similarity index 87% rename from generator/client/golang/templates/queryx/update.go rename to generator/client/golang/templates/queryx/update.gotmpl index 2388cfbe..31ea4606 100644 --- a/generator/client/golang/templates/queryx/update.go +++ b/generator/client/golang/templates/queryx/update.gotmpl @@ -49,7 +49,11 @@ func (s *UpdateStatement) ToSQL() (string, []interface{}) { sets := []string{} for _, col := range s.columns { - sets = append(sets, fmt.Sprintf("%s = ?", col)) + {{- if eq .client.Adapter "mysql" }} + sets = append(sets, fmt.Sprintf("`%s` = ?", col)) + {{- else }} + sets = append(sets, fmt.Sprintf("\"%s\" = ?", col)) + {{- end }} } sql = fmt.Sprintf("%s %s", sql, strings.Join(sets, ", ")) diff --git a/generator/client/golang/templates/queryx/update_test.go b/generator/client/golang/templates/queryx/update_test.go deleted file mode 100644 index 0d5e40e6..00000000 --- a/generator/client/golang/templates/queryx/update_test.go +++ /dev/null @@ -1,14 +0,0 @@ -package queryx - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestNewUpdate(t *testing.T) { - s := NewUpdate().Table("users").Columns("name", "email").Values("test", "test@example.com") - sql, args := s.ToSQL() - require.Equal(t, "UPDATE users SET name = ?, email = ?", sql) - require.Equal(t, []interface{}{"test", "test@example.com"}, args) -} diff --git a/generator/client/typescript/templates/queryx/insert.tstmpl b/generator/client/typescript/templates/queryx/insert.tstmpl index 0f0ca8fe..481f20fe 100644 --- a/generator/client/typescript/templates/queryx/insert.tstmpl +++ b/generator/client/typescript/templates/queryx/insert.tstmpl @@ -55,7 +55,7 @@ export class InsertStatement { {{- if eq $.client.Adapter "mysql" }} sql = `${sql} (\`${this._columns.join("`, `")}\`)`; {{- else }} - sql = `${sql} (${this._columns.join(", ")})`; + sql = `${sql} (\"${this._columns.join("\", \"")}\")`; {{- end }} } else { {{- if eq $.client.Adapter "mysql" }} diff --git a/generator/client/typescript/templates/queryx/update.ts b/generator/client/typescript/templates/queryx/update.tstmpl similarity index 89% rename from generator/client/typescript/templates/queryx/update.ts rename to generator/client/typescript/templates/queryx/update.tstmpl index 5a85e332..7ba385c4 100644 --- a/generator/client/typescript/templates/queryx/update.ts +++ b/generator/client/typescript/templates/queryx/update.tstmpl @@ -48,7 +48,11 @@ export class UpdateStatement { let sets = []; if (this._columns !== undefined) { for (let col of this._columns) { - sets.push(`${col} = ?`); + {{- if eq $.client.Adapter "mysql" }} + sets.push(`\`${col}\` = ?`); + {{- else }} + sets.push(`\"${col}\" = ?`); + {{- end }} } } diff --git a/internal/integration/client.test.ts b/internal/integration/client.test.ts index bb33339d..9b19e46d 100644 --- a/internal/integration/client.test.ts +++ b/internal/integration/client.test.ts @@ -46,6 +46,21 @@ test("create", async () => { expect(user.id).toBeGreaterThan(0); }); +test("delete", async () => { + await c.queryTag().create({ name: "delete_tag", right: 22 }); + let rows = await c.queryTag().where(c.tagRight.eq(22)).deleteAll() + expect(rows).toBeGreaterThan(0); +}); + +test("updateAll", async () => { + await c.queryTag().deleteAll(); + await c.queryTag().create({name:"name",right: 1}); + let all=await c.queryTag().where(c.tagName.eq("name")).where(c.tagRight.eq(1)).updateAll({name:"name1",right: 0}); + expect(all).toBeGreaterThan(0); + let exists=await c.queryTag().where(c.tagName.eq("name1")).exists(); + expect(exists).toEqual(true); +}); + test("insertAll", async () => { await c.queryPost().deleteAll(); await expect(async () => { @@ -397,8 +412,8 @@ test("changeJSON", async () => { }); test("modelJSON", async () => { - let tag = await c.queryTag().create({ name: "test" }); - expect(JSON.stringify(tag)).toEqual(`{"id":${tag.id},"name":"test"}`); + let tag = await c.queryTag().create({ name: "test",right: 1 }); + expect(JSON.stringify(tag)).toEqual(`{"id":${tag.id},"name":"test","right":1}`); }); test("modelString", async () => { diff --git a/internal/integration/client_test.go b/internal/integration/client_test.go index e340f524..b5d01162 100644 --- a/internal/integration/client_test.go +++ b/internal/integration/client_test.go @@ -74,6 +74,27 @@ func TestCreate(t *testing.T) { require.True(t, user.ID > 0) } +func TestDelete(t *testing.T) { + _, err := c.QueryTag().Create(c.ChangeTag().SetRight(22).SetName("delete_tag")) + require.NoError(t, err) + rows, err := c.QueryTag().Where(c.TagRight.EQ(22)).DeleteAll() + require.NoError(t, err) + require.True(t, rows > 0) +} + +func TestUpdateAll(t *testing.T) { + _, err := c.QueryTag().DeleteAll() + require.NoError(t, err) + + tag, err := c.QueryTag().Create(c.ChangeTag().SetRight(1).SetName("name")) + require.NoError(t, err) + + all, err := c.QueryTag().Where(c.TagID.EQ(tag.ID)).Where(c.TagRight.EQ(tag.Right.Val)).UpdateAll(c.ChangeTag().SetRight(0).SetName("name1")) + require.NoError(t, err) + require.True(t, all > 0) + require.Equal(t, int32(1), tag.Right.Val) +} + func TestInsertAll(t *testing.T) { _, err := c.QueryUserPost().DeleteAll() require.NoError(t, err) @@ -494,11 +515,11 @@ func TestChangeJSON(t *testing.T) { } func TestModelJSON(t *testing.T) { - tag, err := c.QueryTag().Create(c.ChangeTag().SetName("test")) + tag, err := c.QueryTag().Create(c.ChangeTag().SetName("test").SetRight(1)) require.NoError(t, err) b, err := json.Marshal(tag) require.NoError(t, err) - require.Equal(t, fmt.Sprintf(`{"id":%d,"name":"test"}`, tag.ID), string(b)) + require.Equal(t, fmt.Sprintf(`{"id":%d,"name":"test","right":1}`, tag.ID), string(b)) } func TestModelStringer(t *testing.T) { diff --git a/internal/integration/mysql.hcl b/internal/integration/mysql.hcl index fbe07a64..64f37eca 100644 --- a/internal/integration/mysql.hcl +++ b/internal/integration/mysql.hcl @@ -109,6 +109,10 @@ database "db" { type = string } + column "right" { + type = integer + } + index { columns = ["name"] unique = true diff --git a/internal/integration/postgresql.hcl b/internal/integration/postgresql.hcl index 17ea6a7e..68a6e732 100644 --- a/internal/integration/postgresql.hcl +++ b/internal/integration/postgresql.hcl @@ -109,6 +109,10 @@ database "db" { type = string } + column "right" { + type = integer + } + index { columns = ["name",] unique = true diff --git a/internal/integration/sqlite.hcl b/internal/integration/sqlite.hcl index 0a266f2d..a689bebf 100644 --- a/internal/integration/sqlite.hcl +++ b/internal/integration/sqlite.hcl @@ -109,6 +109,10 @@ database "db" { type = string } + column "right" { + type = integer + } + index { columns = ["name"] unique = true