summaryrefslogtreecommitdiff
path: root/interface/database.go
diff options
context:
space:
mode:
authorAndrew Guschin <guschin.drew@gmail.com>2022-05-31 11:58:02 +0400
committerAndrew Guschin <guschin.drew@gmail.com>2022-05-31 11:58:55 +0400
commitf0dc98b93c12e6428d84533bc4cc42210522548f (patch)
tree61570027d4ebf84de9e6d02f382bc4b279495bc9 /interface/database.go
parentbe8f64e35096b02339ac7100399167e5d0e3a8a6 (diff)
Добавление нескольких отчётов, представлений для UPDATE и SELECT
Diffstat (limited to 'interface/database.go')
-rw-r--r--interface/database.go76
1 files changed, 72 insertions, 4 deletions
diff --git a/interface/database.go b/interface/database.go
index 1d77827..71ee211 100644
--- a/interface/database.go
+++ b/interface/database.go
@@ -87,7 +87,7 @@ func (conn *SQLConnection) getIdentityColumns(table string) ([]string, error) {
for result.Next() {
boxes := make([]string, len(cols))
dest := make([]interface{}, len(cols))
- for i, _ := range dest {
+ for i := range dest {
dest[i] = &boxes[i]
}
_ = result.Scan(dest...)
@@ -110,7 +110,7 @@ func (conn *SQLConnection) getTable(table string) ([][]string, error) {
for result.Next() {
boxes := make([]string, len(cols))
dest := make([]interface{}, len(cols))
- for i, _ := range dest {
+ for i := range dest {
dest[i] = &boxes[i]
}
_ = result.Scan(dest...)
@@ -133,7 +133,7 @@ func (conn *SQLConnection) getOneToManyTable(manyTable string, manyColumn string
for result.Next() {
boxes := make([]string, len(cols))
dest := make([]interface{}, len(cols))
- for i, _ := range dest {
+ for i := range dest {
dest[i] = &boxes[i]
}
_ = result.Scan(dest...)
@@ -143,11 +143,25 @@ func (conn *SQLConnection) getOneToManyTable(manyTable string, manyColumn string
return msg, nil
}
-func (conn *SQLConnection) deleteWhere(table string, constraint string) error {
+func (conn *SQLConnection) deleteWhere(table string, constraints []string) error {
+ constraint := strings.Join(constraints, " AND ")
_, err := conn.db.Query(fmt.Sprintf("DELETE FROM %s WHERE %s", table, constraint))
return err
}
+func (conn *SQLConnection) updateRow(table string, updateColumns []string, updateValues []string, id string) error {
+ var updates []string
+ for i := 0; i < len(updateColumns); i += 1 {
+ updates = append(updates, fmt.Sprintf("%s = N'%s'", updateColumns[i], updateValues[i]))
+ }
+ _, err := conn.db.Query(fmt.Sprintf(
+ "UPDATE %s SET %s WHERE id = %s",
+ table,
+ strings.Join(updates, ", "),
+ id))
+ return err
+}
+
func (conn *SQLConnection) insertIntoTable(table string, columns []string, values []string) error {
_, err := conn.db.Query(fmt.Sprintf(
"INSERT INTO %s (%s) VALUES (N'%s')",
@@ -156,3 +170,57 @@ func (conn *SQLConnection) insertIntoTable(table string, columns []string, value
strings.Join(values, "',N'")))
return err
}
+
+func (conn *SQLConnection) selectWhere(table string, fields []string, constraints []string) ([][]string, []string, error) {
+ var err error
+ var result *sql.Rows
+ field := strings.Join(fields, ", ")
+ if len(constraints) == 0 {
+ result, err = conn.db.Query(fmt.Sprintf("SELECT %s FROM %s", field, table))
+ } else {
+ constraint := strings.Join(constraints, " AND ")
+ result, err = conn.db.Query(fmt.Sprintf("SELECT %s FROM %s WHERE %s", field, table, constraint))
+ }
+
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var msg [][]string
+ 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)
+ }
+ _ = result.Close()
+
+ return msg, cols, nil
+}
+
+func (conn *SQLConnection) executeSelect(query string) ([][]string, []string, error) {
+ result, err := conn.db.Query(query)
+
+ if err != nil {
+ return nil, nil, err
+ }
+
+ var msg [][]string
+ 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)
+ }
+ _ = result.Close()
+
+ return msg, cols, nil
+}