Column comments added

This commit is contained in:
ycc 2021-10-30 22:21:54 +02:00
parent 712a5f9ca5
commit 523f25edde
5 changed files with 38 additions and 17 deletions

2
go.mod
View File

@ -2,4 +2,4 @@ module forge.redroom.link/yves/sqldb
go 1.15 go 1.15
require github.com/lib/pq v1.9.0 require github.com/lib/pq v1.10.3

2
go.sum
View File

@ -1,2 +1,4 @@
github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8= github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8=
github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg=
github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=

36
pg.go
View File

@ -108,14 +108,14 @@ func (t *TableInfo) GetSchema() (*TableInfo, error) {
var ti TableInfo var ti TableInfo
ti.Name = t.Name ti.Name = t.Name
ti.db = t.db ti.db = t.db
cols, err := t.db.QueryAssociativeArray("SELECT column_name :: varchar as name, REPLACE(REPLACE(data_type,'character varying','varchar'),'character','char') || COALESCE('(' || character_maximum_length || ')', '') as type from INFORMATION_SCHEMA.COLUMNS where table_name ='" + t.Name + "';") cols, err := t.db.QueryAssociativeArray("SELECT column_name :: varchar as name, REPLACE(REPLACE(data_type,'character varying','varchar'),'character','char') || COALESCE('(' || character_maximum_length || ')', '') as type, col_description('public." + t.Name + "'::regclass, ordinal_position) as comment from INFORMATION_SCHEMA.COLUMNS where table_name ='" + t.Name + "';")
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return nil, err return nil, err
} }
ti.Columns = make(map[string]string) ti.Columns = make(map[string]string)
for _, row := range cols { for _, row := range cols {
var name, rowtype string var name, rowtype, comment string
for key, element := range row { for key, element := range row {
if key == "name" { if key == "name" {
name = fmt.Sprintf("%v", element) name = fmt.Sprintf("%v", element)
@ -123,8 +123,14 @@ func (t *TableInfo) GetSchema() (*TableInfo, error) {
if key == "type" { if key == "type" {
rowtype = fmt.Sprintf("%v", element) rowtype = fmt.Sprintf("%v", element)
} }
if key == "comment" {
comment = fmt.Sprintf("%v", element)
}
} }
ti.Columns[name] = rowtype ti.Columns[name] = rowtype
if comment != "<nil>" && strings.TrimSpace(comment) != "" {
ti.Columns[name] = ti.Columns[name] + "|" + comment
}
} }
return &ti, nil return &ti, nil
} }
@ -141,8 +147,8 @@ func (db *Db) CreateTable(t TableInfo) error {
if fmt.Sprintf("%v", name) == "id" { if fmt.Sprintf("%v", name) == "id" {
columns += fmt.Sprintf("%v", name) + " " + "SERIAL PRIMARY KEY," columns += fmt.Sprintf("%v", name) + " " + "SERIAL PRIMARY KEY,"
} else { } else {
desc := strings.Split(fmt.Sprintf("%v", rowtype), "|")
columns += fmt.Sprintf("%v", name) + " " + fmt.Sprintf("%v", rowtype) columns += fmt.Sprintf("%v", name) + " " + desc[0]
columns += "," columns += ","
} }
} }
@ -153,6 +159,18 @@ func (db *Db) CreateTable(t TableInfo) error {
log.Println(err.Error()) log.Println(err.Error())
return err return err
} }
for name, rowtype := range t.Columns {
desc := strings.Split(fmt.Sprintf("%v", rowtype), "|")
if len(desc) > 1 {
query = "COMMENT ON COLUMN " + t.Name + "." + fmt.Sprintf("%v", name) + " IS '" + desc[1] + "'"
_, err := t.db.conn.Query(query)
if err != nil {
log.Println(err.Error())
return err
}
}
}
return nil return nil
} }
@ -172,13 +190,21 @@ func (t *TableInfo) DeleteTable() error {
return nil return nil
} }
func (t *TableInfo) AddColumn(name string, sqltype string) error { func (t *TableInfo) AddColumn(name string, sqltype string, comment string) error {
query := "alter table " + t.Name + " add " + name + " " + sqltype query := "alter table " + t.Name + " add " + name + " " + sqltype
rows, err := t.db.conn.Query(query) rows, err := t.db.conn.Query(query)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return err return err
} }
if strings.TrimSpace(comment) != "" {
query = "COMMENT ON COLUMN " + t.Name + "." + name + " IS '" + comment + "'"
_, err = t.db.conn.Query(query)
if err != nil {
log.Println(err.Error())
return err
}
}
defer rows.Close() defer rows.Close()
return nil return nil
} }

View File

@ -46,7 +46,7 @@ func TestAddColumn(t *testing.T) {
if err != nil { if err != nil {
fmt.Println(err.Error()) fmt.Println(err.Error())
} }
db.Table("test").AddColumn("addcolumn", "integer") db.Table("test").AddColumn("addcolumn", "integer", "comment")
new, err := db.Table("test").GetSchema() new, err := db.Table("test").GetSchema()
if err != nil { if err != nil {
fmt.Println(err.Error()) fmt.Println(err.Error())
@ -174,11 +174,4 @@ func TestDeleteTable(t *testing.T) {
db.Table("test").DeleteTable() db.Table("test").DeleteTable()
tbl, err := db.Table("test").GetSchema()
if err != nil {
fmt.Println(err.Error())
}
if len(tbl.Columns) != 0 {
t.Errorf("Delete table failed")
}
} }

View File

@ -3,12 +3,12 @@
"columns": "columns":
{ {
"id":"integer", "id":"integer",
"name":"varchar(255)", "name":"varchar(255)|comment",
"description":"varchar(1000)", "description":"varchar(1000)",
"startdate":"timestamp", "startdate":"timestamp",
"enddate":"timestamp", "enddate":"timestamp",
"latitude":"float", "latitude":"float|map",
"longitude":"float", "longitude":"float|map",
"intvalue":"integer", "intvalue":"integer",
"floatvalue":"float", "floatvalue":"float",
"price":"money", "price":"money",