adding mysql support, table creation tested, TODO schema
This commit is contained in:
parent
cf652439b4
commit
974fab1d64
@ -3,6 +3,7 @@ package sqldb
|
|||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -11,6 +12,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
_ "github.com/go-sql-driver/mysql"
|
||||||
"github.com/lib/pq"
|
"github.com/lib/pq"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -63,12 +65,12 @@ func (db *Db) Table(name string) *TableInfo {
|
|||||||
return &ti
|
return &ti
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAssociativeArray : Provide results as an associative array
|
// GetAssociativeArray : Provide table data as an associative array
|
||||||
func (t *TableInfo) GetAssociativeArray(columns []string, restriction string, sortkeys []string, dir string) ([]AssRow, error) {
|
func (t *TableInfo) GetAssociativeArray(columns []string, restriction string, sortkeys []string, dir string) ([]AssRow, error) {
|
||||||
return t.db.QueryAssociativeArray(t.buildSelect("", columns, restriction, sortkeys, dir))
|
return t.db.QueryAssociativeArray(t.buildSelect("", columns, restriction, sortkeys, dir))
|
||||||
}
|
}
|
||||||
|
|
||||||
// QueryAssociativeArray : Provide results as an associative array
|
// QueryAssociativeArray : Provide query result as an associative array
|
||||||
func (db *Db) QueryAssociativeArray(query string) (Rows, error) {
|
func (db *Db) QueryAssociativeArray(query string) (Rows, error) {
|
||||||
rows, err := db.conn.Query(query)
|
rows, err := db.conn.Query(query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -112,12 +114,21 @@ func (db *Db) QueryAssociativeArray(query string) (Rows, error) {
|
|||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSchema : Provide results as an associative array
|
// GetSchema : Provide table schema as an associative array
|
||||||
func (t *TableInfo) GetSchema() (*TableInfo, error) {
|
func (t *TableInfo) GetSchema() (*TableInfo, error) {
|
||||||
|
pgSchema := "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 + "';"
|
||||||
|
mySchema := "SELECT COLUMN_NAME as name, DATA_TYPE || CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + t.Name + "';"
|
||||||
|
var schemaQuery string
|
||||||
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, col_description('public." + t.Name + "'::regclass, ordinal_position) as comment from INFORMATION_SCHEMA.COLUMNS where table_name ='" + t.Name + "';")
|
if t.db.Driver == "postgres" {
|
||||||
|
schemaQuery = pgSchema
|
||||||
|
}
|
||||||
|
if t.db.Driver == "mysql" {
|
||||||
|
schemaQuery = mySchema
|
||||||
|
}
|
||||||
|
cols, err := t.db.QueryAssociativeArray(schemaQuery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -144,6 +155,7 @@ func (t *TableInfo) GetSchema() (*TableInfo, error) {
|
|||||||
return &ti, nil
|
return &ti, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSchema : Provide full database schema as an associative array
|
||||||
func (db *Db) GetSchema() ([]TableInfo, error) {
|
func (db *Db) GetSchema() ([]TableInfo, error) {
|
||||||
var res []TableInfo
|
var res []TableInfo
|
||||||
tables, err := db.ListTables()
|
tables, err := db.ListTables()
|
||||||
@ -168,10 +180,25 @@ func (db *Db) GetSchema() ([]TableInfo, error) {
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSchema : Provide database tables list
|
||||||
func (db *Db) ListTables() (Rows, error) {
|
func (db *Db) ListTables() (Rows, error) {
|
||||||
|
if db.Driver == "postgres" {
|
||||||
|
return db.pgListTables()
|
||||||
|
}
|
||||||
|
if db.Driver == "mysql" {
|
||||||
|
return db.myListTables()
|
||||||
|
}
|
||||||
|
return nil, errors.New("no driver")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *Db) pgListTables() (Rows, error) {
|
||||||
return db.QueryAssociativeArray("SELECT table_name :: varchar as name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name;")
|
return db.QueryAssociativeArray("SELECT table_name :: varchar as name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name;")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (db *Db) myListTables() (Rows, error) {
|
||||||
|
return db.QueryAssociativeArray("SELECT TABLE_NAME as name FROM information_schema.TABLES WHERE TABLE_TYPE LIKE 'BASE_TABLE';")
|
||||||
|
}
|
||||||
|
|
||||||
func (db *Db) CreateTable(t TableInfo) error {
|
func (db *Db) CreateTable(t TableInfo) error {
|
||||||
t.db = db
|
t.db = db
|
||||||
query := "create table " + t.Name + " ( "
|
query := "create table " + t.Name + " ( "
|
29
docker-compose.yml
Normal file
29
docker-compose.yml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
version: '3.1'
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
pg:
|
||||||
|
image: postgres:alpine
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: test
|
||||||
|
POSTGRES_PASSWORD: test
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
|
||||||
|
my:
|
||||||
|
image: mariadb:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: test
|
||||||
|
MYSQL_USER: test
|
||||||
|
MYSQL_PASSWORD: test
|
||||||
|
MARIADB_ROOT_PASSWORD: root
|
||||||
|
ports:
|
||||||
|
- 3306:3306
|
||||||
|
|
||||||
|
adminer:
|
||||||
|
image: adminer
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8080:8080
|
5
go.mod
5
go.mod
@ -2,4 +2,7 @@ module forge.redroom.link/yves/sqldb
|
|||||||
|
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
require github.com/lib/pq v1.10.4
|
require (
|
||||||
|
github.com/go-sql-driver/mysql v1.7.1
|
||||||
|
github.com/lib/pq v1.10.4
|
||||||
|
)
|
||||||
|
2
go.sum
2
go.sum
@ -1,2 +1,4 @@
|
|||||||
|
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||||
|
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
||||||
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
|
230
my_test.go
Executable file
230
my_test.go
Executable file
@ -0,0 +1,230 @@
|
|||||||
|
package sqldb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMyCreateTable(t *testing.T) {
|
||||||
|
db := Open("mysql", "test:test@tcp(127.0.0.1:3306)/test")
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
jsonFile, err := os.Open("test_table.json")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
defer jsonFile.Close()
|
||||||
|
|
||||||
|
byteValue, _ := ioutil.ReadAll(jsonFile)
|
||||||
|
|
||||||
|
var jsonSource TableInfo
|
||||||
|
json.Unmarshal([]byte(byteValue), &jsonSource)
|
||||||
|
|
||||||
|
err = db.CreateTable(jsonSource)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
sch, err := db.Table("test").GetSchema()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
if len(sch.Columns) == 0 {
|
||||||
|
t.Errorf("Create table failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyAddColumn(t *testing.T) {
|
||||||
|
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
old, err := db.Table("test").GetSchema()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
db.Table("test").AddColumn("addcolumn", "integer", "comment")
|
||||||
|
new, err := db.Table("test").GetSchema()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(old.Columns) == len(new.Columns) {
|
||||||
|
t.Errorf("Column already exist")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyInsert(t *testing.T) {
|
||||||
|
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
vl := make(AssRow)
|
||||||
|
vl["name"] = "toto"
|
||||||
|
vl["description"] = "tata"
|
||||||
|
|
||||||
|
old, err := db.Table("test").GetAssociativeArray([]string{"*"}, "", []string{}, "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
jsonStringOld, _ := json.Marshal(old)
|
||||||
|
fmt.Println(string(jsonStringOld))
|
||||||
|
|
||||||
|
db.Table("test").UpdateOrInsert(vl)
|
||||||
|
|
||||||
|
new, err := db.Table("test").GetAssociativeArray([]string{"*"}, "", []string{}, "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
jsonStringNew, _ := json.Marshal(new)
|
||||||
|
fmt.Println(string(jsonStringNew))
|
||||||
|
|
||||||
|
if len(jsonStringOld) == len(jsonStringNew) {
|
||||||
|
t.Errorf("Error row not created")
|
||||||
|
}
|
||||||
|
jsonFile, err := os.Open("insert.json")
|
||||||
|
defer jsonFile.Close()
|
||||||
|
var result map[string]interface{}
|
||||||
|
byteValue, _ := ioutil.ReadAll(jsonFile)
|
||||||
|
json.Unmarshal(byteValue, &result)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyUpdate(t *testing.T) {
|
||||||
|
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
vl := make(AssRow)
|
||||||
|
vl["id"] = 1
|
||||||
|
vl["name"] = "titi"
|
||||||
|
vl["description"] = "toto"
|
||||||
|
|
||||||
|
old, err := db.Table("test").GetAssociativeArray([]string{"*"}, "", []string{}, "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
jsonStringOld, _ := json.Marshal(old)
|
||||||
|
fmt.Println(string(jsonStringOld))
|
||||||
|
|
||||||
|
db.Table("test").UpdateOrInsert(vl)
|
||||||
|
|
||||||
|
new, err := db.Table("test").GetAssociativeArray([]string{"*"}, "", []string{}, "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
jsonStringNew, _ := json.Marshal(new)
|
||||||
|
fmt.Println(string(jsonStringNew))
|
||||||
|
|
||||||
|
if string(jsonStringOld) == string(jsonStringNew) {
|
||||||
|
t.Errorf("Error row not updated")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyDelete(t *testing.T) {
|
||||||
|
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
vl := make(AssRow)
|
||||||
|
vl["id"] = 1
|
||||||
|
|
||||||
|
old, err := db.Table("test").GetAssociativeArray([]string{"*"}, "", []string{}, "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
jsonStringOld, _ := json.Marshal(old)
|
||||||
|
fmt.Println(string(jsonStringOld))
|
||||||
|
|
||||||
|
db.Table("test").Delete(vl)
|
||||||
|
|
||||||
|
new, err := db.Table("test").GetAssociativeArray([]string{"*"}, "", []string{}, "")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
jsonStringNew, _ := json.Marshal(new)
|
||||||
|
fmt.Println(string(jsonStringNew))
|
||||||
|
|
||||||
|
if len(jsonStringOld) == len(jsonStringNew) {
|
||||||
|
t.Errorf("Error row not deleted")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyDeleteColumn(t *testing.T) {
|
||||||
|
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
old, err := db.Table("test").GetSchema()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
db.Table("test").DeleteColumn("addcolumn")
|
||||||
|
new, err := db.Table("test").GetSchema()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(old.Columns) == len(new.Columns) {
|
||||||
|
t.Errorf("Error column not deleted")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyDeleteTable(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
db.Table("test").DeleteTable()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyImportSchema(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
db.ImportSchema("pfn.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyClearImportSchema(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
db.ClearImportSchema("pfn.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyGetSchema(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
data, err := db.GetSchema()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
val, _ := json.Marshal(data)
|
||||||
|
fmt.Println(string(val))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMySaveSchema(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
err := db.SaveSchema("schema.json")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func TestMyGenerateTemplate(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
err := db.GenerateTemplate("plantuml.tmpl", "schema.puml")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMyGenerateTableTemplate(t *testing.T) {
|
||||||
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
|
defer db.Close()
|
||||||
|
err := db.GenerateTableTemplates("table.tmpl", "gen", "html")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
}
|
||||||
|
}
|
26
pg_test.go
26
pg_test.go
@ -8,7 +8,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCreateTable(t *testing.T) {
|
func TestPgCreateTable(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ func TestCreateTable(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAddColumn(t *testing.T) {
|
func TestPgAddColumn(t *testing.T) {
|
||||||
|
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
@ -57,7 +57,7 @@ func TestAddColumn(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInsert(t *testing.T) {
|
func TestPgInsert(t *testing.T) {
|
||||||
|
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
@ -92,7 +92,7 @@ func TestInsert(t *testing.T) {
|
|||||||
json.Unmarshal(byteValue, &result)
|
json.Unmarshal(byteValue, &result)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdate(t *testing.T) {
|
func TestPgUpdate(t *testing.T) {
|
||||||
|
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
@ -124,7 +124,7 @@ func TestUpdate(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDelete(t *testing.T) {
|
func TestPgDelete(t *testing.T) {
|
||||||
|
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
@ -153,7 +153,7 @@ func TestDelete(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteColumn(t *testing.T) {
|
func TestPgDeleteColumn(t *testing.T) {
|
||||||
|
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
@ -173,26 +173,26 @@ func TestDeleteColumn(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteTable(t *testing.T) {
|
func TestPgDeleteTable(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
db.Table("test").DeleteTable()
|
db.Table("test").DeleteTable()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImportSchema(t *testing.T) {
|
func TestPgImportSchema(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
db.ImportSchema("pfn.json")
|
db.ImportSchema("pfn.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestClearImportSchema(t *testing.T) {
|
func TestPgClearImportSchema(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
db.ClearImportSchema("pfn.json")
|
db.ClearImportSchema("pfn.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetSchema(t *testing.T) {
|
func TestPgGetSchema(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
data, err := db.GetSchema()
|
data, err := db.GetSchema()
|
||||||
@ -203,7 +203,7 @@ func TestGetSchema(t *testing.T) {
|
|||||||
fmt.Println(string(val))
|
fmt.Println(string(val))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSaveSchema(t *testing.T) {
|
func TestPgSaveSchema(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
err := db.SaveSchema("schema.json")
|
err := db.SaveSchema("schema.json")
|
||||||
@ -211,7 +211,7 @@ func TestSaveSchema(t *testing.T) {
|
|||||||
fmt.Println(err.Error())
|
fmt.Println(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func TestGenerateTemplate(t *testing.T) {
|
func TestPgGenerateTemplate(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
err := db.GenerateTemplate("plantuml.tmpl", "schema.puml")
|
err := db.GenerateTemplate("plantuml.tmpl", "schema.puml")
|
||||||
@ -220,7 +220,7 @@ func TestGenerateTemplate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGenerateTableTemplate(t *testing.T) {
|
func TestPgGenerateTableTemplate(t *testing.T) {
|
||||||
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
db := Open("postgres", "host=127.0.0.1 port=5432 user=test password=test dbname=test sslmode=disable")
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
err := db.GenerateTableTemplates("table.tmpl", "gen", "html")
|
err := db.GenerateTableTemplates("table.tmpl", "gen", "html")
|
||||||
|
58
survey.json
Normal file
58
survey.json
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "survey",
|
||||||
|
"columns": {
|
||||||
|
"id": "integer",
|
||||||
|
"name": "varchar(255)",
|
||||||
|
"description": "varchar(1000)",
|
||||||
|
"start":"timestmp",
|
||||||
|
"stop":"timestmpestamp",
|
||||||
|
"published":"bool"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "surveyquestion",
|
||||||
|
"columns": {
|
||||||
|
"id": "integer",
|
||||||
|
"survey_id": "integer",
|
||||||
|
"question_id": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "chapter",
|
||||||
|
"columns": {
|
||||||
|
"id": "integer",
|
||||||
|
"name": "varchar(255)",
|
||||||
|
"order": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "question",
|
||||||
|
"columns": {
|
||||||
|
"name": "varchar(255)",
|
||||||
|
"text": "varchar(1000)",
|
||||||
|
"type": "varchar(255)",
|
||||||
|
"options": "varchar(1000)",
|
||||||
|
"id": "integer",
|
||||||
|
"order": "integer",
|
||||||
|
"chapter_id": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "authuser",
|
||||||
|
"columns": {
|
||||||
|
"survey_id": "integer",
|
||||||
|
"code": "varchar(1000)",
|
||||||
|
"id": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "answer",
|
||||||
|
"columns": {
|
||||||
|
"question_id": "integer",
|
||||||
|
"code_id": "integer",
|
||||||
|
"value":"integer",
|
||||||
|
"text": "varchar(2000)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
@ -11,7 +11,7 @@
|
|||||||
"longitude":"float|map",
|
"longitude":"float|map",
|
||||||
"intvalue":"integer",
|
"intvalue":"integer",
|
||||||
"floatvalue":"float",
|
"floatvalue":"float",
|
||||||
"price":"money",
|
"price":"float",
|
||||||
"testtype_id":"integer"
|
"testtype_id":"integer"
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user