From 5ac59d00add5c7982bc3eefa9145bfe676044734 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Tue, 24 May 2022 12:57:09 +0400 Subject: =?UTF-8?q?=D0=91=D0=B0=D0=B7=D0=BE=D0=B2=D0=B0=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D1=84=D0=B5=D0=B9=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/database.go | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 interface/database.go (limited to 'interface/database.go') 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 +} -- cgit v1.2.3