Skip to content

Commit

Permalink
add drop table
Browse files Browse the repository at this point in the history
  • Loading branch information
sxwebdev authored Apr 13, 2024
1 parent 11ce516 commit e908ef9
Show file tree
Hide file tree
Showing 6 changed files with 239 additions and 68 deletions.
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
tests:
go test -v ./...
51 changes: 51 additions & 0 deletions drop_table.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package tsbuilder

import (
"bytes"
"fmt"
"strings"
)

var _ tdEngineSqlBuilder = (*dropTableBuilder)(nil)

type dropTableBuilder struct {
tables []string
}

func NewDropTableBuilder() *dropTableBuilder {
return &dropTableBuilder{
tables: make([]string, 0),
}
}

func (s *dropTableBuilder) Tables(tables ...string) *dropTableBuilder {
s.tables = append(s.tables, tables...)
return s
}

func (s *dropTableBuilder) Build() (string, error) {
if err := s.validate(); err != nil {
return "", fmt.Errorf("validate error: %w", err)
}

b := bytes.NewBuffer([]byte{})
b.WriteString("DROP TABLE ")

for idx, table := range s.tables {
s.tables[idx] = "IF EXISTS " + table
}

b.WriteString(strings.Join(s.tables, ", "))

b.WriteString(";")

return b.String(), nil
}

func (s *dropTableBuilder) validate() error {
if len(s.tables) == 0 {
return fmt.Errorf("tables are required")
}

return nil
}
8 changes: 8 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
module github.com/tkcrm/tsbuilder

go 1.18

require github.com/stretchr/testify v1.9.0

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
7 changes: 5 additions & 2 deletions select.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,15 @@ func (s *selectBuilder) Build() (string, error) {

// add offset
if s.offset != nil {
b.WriteString(fmt.Sprintf("OFFSET %d", *s.offset) + " ")
b.WriteString(fmt.Sprintf("OFFSET %d", *s.offset))
}

// add soffset
if s.soffset != nil {
b.WriteString(fmt.Sprintf("SOFFSET %d", *s.soffset) + " ")
if s.offset != nil {
b.WriteString(" ")
}
b.WriteString(fmt.Sprintf("SOFFSET %d", *s.soffset))
}

b.WriteString(";")
Expand Down
229 changes: 163 additions & 66 deletions tsdbbuilder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,43 @@ import (
"fmt"
"testing"

"github.com/stretchr/testify/require"
"github.com/tkcrm/tsbuilder"
"github.com/tkcrm/tsbuilder/tsfuncs"
)

func Test_Create(t *testing.T) {
b := tsbuilder.NewCreateTableBuilder().
TableName("test_table").
STable("s_table_name").
Tags(map[string]any{
"test": tsfuncs.Binary("16"),
"test2": tsfuncs.Binary("24"),
"test3": 3,
})

sql, err := b.Build()
if err != nil {
t.Fatal(err)
tests := []struct {
name string
stable string
tags map[string]any
expect string
}{
{
name: "table_name",
stable: "s_table_name",
tags: map[string]any{
"test": tsfuncs.Binary("16"),
"test2": tsfuncs.Binary("24"),
"test3": 3,
},
expect: "CREATE TABLE IF NOT EXISTS table_name USING s_table_name (test, test2, test3) TAGS (BINARY(16), BINARY(24), 3);",
},
}

fmt.Println(sql)
for _, tc := range tests {
t.Run("", func(t *testing.T) {
b := tsbuilder.NewCreateTableBuilder().
TableName(tc.name).
STable(tc.stable).
Tags(tc.tags)

sql, err := b.Build()
require.NoError(t, err)

require.Equal(t, tc.expect, sql)
})
}
}

func Test_Insert(t *testing.T) {
Expand Down Expand Up @@ -67,78 +84,158 @@ func Test_Insert(t *testing.T) {
}

func Test_Delete(t *testing.T) {
b := tsbuilder.NewDeleteBuilder().
From("dbName.test_table").
Where(
"asasd > asd",
"asdfasdf <= 1212",
)

sql, err := b.Build()
if err != nil {
t.Fatal(err)
tests := []struct {
from string
wheres []string
expect string
}{
{
from: "dbName.test_table",
wheres: []string{"asasd > asd", "asdfasdf <= 1212"},
expect: "DELETE FROM dbName.test_table WHERE asasd > asd AND asdfasdf <= 1212;",
},
}

fmt.Println(sql)
for _, tc := range tests {
t.Run("", func(t *testing.T) {
b := tsbuilder.NewDeleteBuilder().
From(tc.from).
Where(tc.wheres...)

sql, err := b.Build()
require.NoError(t, err)

require.Equal(t, tc.expect, sql)
})
}
}

func Test_Select(t *testing.T) {
limit := uint64(10)
offset := uint64(0)

b := tsbuilder.NewSelectBuilder().
Columns("col_1", "col_2", "col_3").
From("dbName.test_table").
Where(
"asasd > asd",
"asdfasdf <= 1212",
).
OrderBy("ts desc").
Limit(&limit).
Offset(&offset)

sql, err := b.Build()
if err != nil {
t.Fatal(err)
tests := []struct {
columns []string
from string
wheres []string
orderBy string
limit uint64
offset uint64
expect string
}{
{
columns: []string{"col_1", "col_2", "col_3"},
from: "dbName.test_table",
wheres: []string{"asasd > asd", "asdfasdf <= 1212"},
orderBy: "ts desc",
limit: 10,
offset: 0,
expect: "SELECT col_1, col_2, col_3 FROM dbName.test_table WHERE asasd > asd AND asdfasdf <= 1212 ORDER BY ts desc LIMIT 10 OFFSET 0;",
},
}

fmt.Println(sql)
for _, tc := range tests {
t.Run("", func(t *testing.T) {
b := tsbuilder.NewSelectBuilder().
Columns(tc.columns...).
From(tc.from).
Where(tc.wheres...).
OrderBy(tc.orderBy).
Limit(&limit).
Offset(&offset)

sql, err := b.Build()
require.NoError(t, err)

require.Equal(t, tc.expect, sql)
})
}
}

func Test_Database(t *testing.T) {
b := tsbuilder.NewDatabaseBuilder().
Name("db_name").
Options(
"adsasd 12",
"fasasdas true",
)

sql, err := b.Build()
if err != nil {
t.Fatal(err)
tests := []struct {
name string
options []string
expect string
}{
{
name: "db_name",
options: []string{"adsasd 12", "fasasdas true"},
expect: "CREATE DATABASE IF NOT EXISTS db_name adsasd 12 fasasdas true;",
},
}

fmt.Println(sql)
for _, tc := range tests {
t.Run("", func(t *testing.T) {
b := tsbuilder.NewDatabaseBuilder().
Name(tc.name).
Options(tc.options...)

sql, err := b.Build()
require.NoError(t, err)

require.Equal(t, tc.expect, sql)
})
}
}

func Test_STable(t *testing.T) {
b := tsbuilder.NewSTableBuilder().
Name("s_table_name").
Definitions("vasdvasdv", "caqwqdw").
Tags(map[string]any{
"tag_1": 1,
"tag_2": 2,
"tag_3": 3,
}).
Options(
"adsasd 12",
"fasasdas true",
)
tests := []struct {
name string
definitions []string
tags map[string]any
options []string
expect string
}{
{
name: "s_table_name",
definitions: []string{"vasdvasdv", "caqwqdw"},
tags: map[string]any{
"tag_1": 1,
"tag_2": 2,
"tag_3": 3,
},
options: []string{"adsasd 12", "fasasdas true"},
expect: "CREATE STABLE IF NOT EXISTS s_table_name (vasdvasdv, caqwqdw) TAGS (tag_1 1, tag_2 2, tag_3 3) adsasd 12 fasasdas true;",
},
}

sql, err := b.Build()
if err != nil {
t.Fatal(err)
for _, tc := range tests {
t.Run("", func(t *testing.T) {
b := tsbuilder.NewSTableBuilder().
Name(tc.name).
Definitions(tc.definitions...).
Tags(tc.tags).
Options(tc.options...)

sql, err := b.Build()
require.NoError(t, err)

require.Equal(t, tc.expect, sql)
})
}
}

func Test_DropTable(t *testing.T) {
tests := []struct {
tables []string
expect string
}{
{
tables: []string{"db_name.test_table", "db_name.test_table_2"},
expect: "DROP TABLE IF EXISTS db_name.test_table, IF EXISTS db_name.test_table_2;",
},
}

fmt.Println(sql)
for _, tc := range tests {
t.Run("", func(t *testing.T) {
b := tsbuilder.NewDropTableBuilder().
Tables(tc.tables...)

sql, err := b.Build()
require.NoError(t, err)

require.Equal(t, tc.expect, sql)
})
}
}

0 comments on commit e908ef9

Please sign in to comment.