diff options
Diffstat (limited to 'interface/database.go')
| -rw-r--r-- | interface/database.go | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/interface/database.go b/interface/database.go new file mode 100644 index 0000000..446b015 --- /dev/null +++ b/interface/database.go @@ -0,0 +1,116 @@ +package main + +import ( + "database/sql" + "fmt" + _ "github.com/denisenkom/go-mssqldb" +) + +type SQLConnection struct { + db *sql.DB +} + +func (conn *SQLConnection) init() error { + //query := url.Values{} + //query.Add("app name", "MyAppName") + // + //u := &url.URL{ + // Scheme: "sqlserver", + // User: url.UserPassword("sa", "Datab@sed1337"), + // Host: fmt.Sprintf("%s:%d", "", 1431), + // // Path: instance, // if connecting to an instance instead of a port + // RawQuery: query.Encode(), + //} + //var err error + //conn.db, err = sql.Open("sqlserver", u.String()) + //return err + var err error + conn.db, err = sql.Open("sqlserver", "server=localhost;user id=sa;password=Datab@sed1337;") + return err +} + +type Box struct { + id int + orderId int + warehouseId int + wrappingId int + volume float32 + weight float32 +} + +func (conn *SQLConnection) getTables() ([]string, error) { + result, err := conn.db.Query( + `SELECT TABLE_CATALOG + '.' + TABLE_SCHEMA + '.' + TABLE_NAME as TABLE_NAME + FROM shipping.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'`) + if err != nil { + return nil, err + } + + var tables []string + for result.Next() { + var row string + _ = result.Scan(&row) + tables = append(tables, row) + } + + return tables, nil +} + +func (conn *SQLConnection) getViews() ([]string, error) { + result, err := conn.db.Query( + `select name from sys.views where is_ms_shipped=0;`) + if err != nil { + return nil, err + } + + var tables []string + for result.Next() { + var row string + _ = result.Scan(&row) + tables = append(tables, row) + } + + return tables, nil +} + +func (conn *SQLConnection) getColumns(table string) ([]string, error) { + result, err := conn.db.Query(fmt.Sprintf("SELECT TOP 1 * FROM %s", table)) + if err != nil { + return nil, nil + } + return result.Columns() +} + +func (conn *SQLConnection) getTable(table string) ([][]string, error) { + var err error + var msg [][]string + + result, err := conn.db.Query(fmt.Sprintf("SELECT * FROM %s", table)) + if err != nil { + return msg, err + } + + cols, _ := result.Columns() + for result.Next() { + boxes := make([]string, len(cols)) + dest := make([]interface{}, len(cols)) + for i, _ := range dest { + dest[i] = &boxes[i] + } + _ = result.Scan(dest...) + msg = append(msg, boxes) + } + + //for result.Next() { + // var box Box + // err = result.Scan( + // &box.id, &box.orderId, + // &box.warehouseId, + // &box.wrappingId, + // &box.volume, &box.weight) + // msg = append(msg, box) + //} + _ = result.Close() + + return msg, err +} |