1package dialectquery
2
3import "fmt"
4
5type Ydb struct{}
6
7var _ Querier = (*Ydb)(nil)
8
9func (c *Ydb) CreateTable(tableName string) string {
10 q := `CREATE TABLE %s (
11 version_id Uint64,
12 is_applied Bool,
13 tstamp Timestamp,
14
15 PRIMARY KEY(version_id)
16 )`
17 return fmt.Sprintf(q, tableName)
18}
19
20func (c *Ydb) InsertVersion(tableName string) string {
21 q := `INSERT INTO %s (
22 version_id,
23 is_applied,
24 tstamp
25 ) VALUES (
26 CAST($1 AS Uint64),
27 $2,
28 CurrentUtcTimestamp()
29 )`
30 return fmt.Sprintf(q, tableName)
31}
32
33func (c *Ydb) DeleteVersion(tableName string) string {
34 q := `DELETE FROM %s WHERE version_id = $1`
35 return fmt.Sprintf(q, tableName)
36}
37
38func (c *Ydb) GetMigrationByVersion(tableName string) string {
39 q := `SELECT tstamp, is_applied FROM %s WHERE version_id = $1 ORDER BY tstamp DESC LIMIT 1`
40 return fmt.Sprintf(q, tableName)
41}
42
43func (c *Ydb) ListMigrations(tableName string) string {
44 q := `
45 SELECT version_id, is_applied, tstamp AS __discard_column_tstamp
46 FROM %s ORDER BY __discard_column_tstamp DESC`
47 return fmt.Sprintf(q, tableName)
48}
49
50func (c *Ydb) GetLatestVersion(tableName string) string {
51 q := `SELECT MAX(version_id) FROM %s`
52 return fmt.Sprintf(q, tableName)
53}