|
|
@@ -0,0 +1,192 @@
|
|
|
+package sql
|
|
|
+
|
|
|
+import (
|
|
|
+ "database/sql"
|
|
|
+ "errors"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ // _ "github.com/go-sql-driver/mysql"
|
|
|
+ _ "github.com/go-sql-driver/mysql"
|
|
|
+)
|
|
|
+
|
|
|
+//SQL ...
|
|
|
+type SQL struct {
|
|
|
+ db *sql.DB
|
|
|
+ err error
|
|
|
+}
|
|
|
+
|
|
|
+// NewSQL ...
|
|
|
+func NewMySQL(server, login, mdp, base string) *SQL {
|
|
|
+ db, err := Connect(server, login, mdp, base)
|
|
|
+ if err != nil {
|
|
|
+ panic(err.Error())
|
|
|
+ }
|
|
|
+ s := new(SQL)
|
|
|
+ s.db = db
|
|
|
+ s.err = err
|
|
|
+ return s
|
|
|
+}
|
|
|
+
|
|
|
+func Connect(server, login, mdp, base string) (*sql.DB, error) {
|
|
|
+ db, err := sql.Open("mysql", login+":"+mdp+"@tcp("+server+")/"+base)
|
|
|
+ return db, err
|
|
|
+}
|
|
|
+
|
|
|
+/* INSERT
|
|
|
+ */
|
|
|
+func (s *SQL) Insert(table string, columns []string, values [][]string) error {
|
|
|
+ if len(table) <= 0 || values == nil {
|
|
|
+ return errors.New("") // parametre incorrect
|
|
|
+ }
|
|
|
+ if columns != nil {
|
|
|
+ for _, v := range values {
|
|
|
+ if len(v) != len(columns) {
|
|
|
+ return errors.New("") // Il n'y a pas le meme nombre de colonnes dans une ou plusieurs ligne de values
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if values == nil {
|
|
|
+ return errors.New("") // no values
|
|
|
+ }
|
|
|
+ cols := "("
|
|
|
+ if columns != nil {
|
|
|
+ for i, column := range columns {
|
|
|
+ if i != 0 {
|
|
|
+ cols += ", "
|
|
|
+ }
|
|
|
+ cols += column
|
|
|
+ }
|
|
|
+ cols += ")"
|
|
|
+ }
|
|
|
+ vals := ""
|
|
|
+ for j, value := range values {
|
|
|
+ if j != 0 {
|
|
|
+ vals += ", "
|
|
|
+ }
|
|
|
+ vals += "("
|
|
|
+ for i := 0; i < len(value); i++ {
|
|
|
+ if i != 0 {
|
|
|
+ vals += ", "
|
|
|
+ }
|
|
|
+ if value[i] != "" {
|
|
|
+ vals += "'" + value[i] + "'"
|
|
|
+ } else {
|
|
|
+ vals += "null"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vals += ")"
|
|
|
+ }
|
|
|
+ sql := ""
|
|
|
+ if columns != nil {
|
|
|
+ sql = "INSERT INTO " + table + " " + cols + " VALUES " + vals + ";"
|
|
|
+ } else {
|
|
|
+ sql = "INSERT INTO " + table + " VALUES " + vals + ";"
|
|
|
+ }
|
|
|
+ insert, err := s.db.Query(sql)
|
|
|
+ if err != nil || insert.Err() != nil {
|
|
|
+ return errors.New("error syntax : " + sql) // Error syntax sql
|
|
|
+ }
|
|
|
+ defer insert.Close()
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *SQL) DeleteAND(table string, wheres [][]string) error {
|
|
|
+ if len(table) <= 0 || wheres == nil {
|
|
|
+ return errors.New("") // parametre incorrect
|
|
|
+ }
|
|
|
+ lines := ""
|
|
|
+ flag := 0
|
|
|
+ for _, where := range wheres {
|
|
|
+ if flag != 0 {
|
|
|
+ lines += " AND "
|
|
|
+ }
|
|
|
+ lines += where[0] + " = '" + where[1] + "'"
|
|
|
+ flag = 1
|
|
|
+ }
|
|
|
+ sql := "DELETE FROM " + table + " WHERE " + lines + ";"
|
|
|
+ delete, err := s.db.Query(sql)
|
|
|
+ if err != nil || delete.Err() != nil {
|
|
|
+ return errors.New("error syntax : " + sql) // Error syntax
|
|
|
+ }
|
|
|
+ defer delete.Close()
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *SQL) UpdateAND(table string, sets [][]string, wheres [][]string) error {
|
|
|
+ if len(table) <= 0 || sets == nil || wheres == nil {
|
|
|
+ return errors.New("") //parametre incorrect
|
|
|
+ }
|
|
|
+ conds := ""
|
|
|
+ flag := 0
|
|
|
+ for _, where := range wheres {
|
|
|
+ if flag != 0 {
|
|
|
+ conds += " AND "
|
|
|
+ }
|
|
|
+ conds += where[0] + " = '" + where[1] + "'"
|
|
|
+ flag = 1
|
|
|
+ }
|
|
|
+ vls := ""
|
|
|
+ flagA := 0
|
|
|
+ for _, set := range sets {
|
|
|
+ if flagA != 0 {
|
|
|
+ vls += ", "
|
|
|
+ }
|
|
|
+ vls += set[0] + " = '" + set[1] + "'"
|
|
|
+ flagA = 1
|
|
|
+ }
|
|
|
+ sql := "UPDATE " + table + " SET " + vls + " WHERE " + conds + ";"
|
|
|
+ update, err := s.db.Query(sql)
|
|
|
+ if err != nil || update.Err() != nil {
|
|
|
+ return errors.New("error syntax : " + sql) // Error syntax
|
|
|
+ }
|
|
|
+ defer update.Close()
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+Select
|
|
|
+@return [column][row]string, error
|
|
|
+*/
|
|
|
+func (s *SQL) SelectAND(table string, colvals [][]string) ([][]string, error) {
|
|
|
+ if len(table) <= 0 {
|
|
|
+ return nil, errors.New("") // parameter incorrect
|
|
|
+ }
|
|
|
+ var rsltRow [][]string
|
|
|
+ var requete string = "SELECT * FROM " + table
|
|
|
+ if colvals != nil {
|
|
|
+ requete += " WHERE "
|
|
|
+ for i, colval := range colvals {
|
|
|
+ if i != 0 {
|
|
|
+ requete += " AND "
|
|
|
+ }
|
|
|
+ if strings.IndexRune(colval[1], '*') > 0 {
|
|
|
+ requete += colval[0] + " LIKE '" + colval[1] + "'"
|
|
|
+ } else {
|
|
|
+ requete += colval[0] + " = '" + colval[1] + "'"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ requete += ";"
|
|
|
+ rcolumns, _ := s.db.Query(requete)
|
|
|
+ columns, _ := rcolumns.ColumnTypes()
|
|
|
+ for _, column := range columns {
|
|
|
+ rows, _ := s.db.Query(strings.Replace(requete, "*", column.Name(), 1))
|
|
|
+ var bytes []byte
|
|
|
+ var rsltCol []string
|
|
|
+ rsltCol = append(rsltCol, column.Name())
|
|
|
+ for rows.Next() {
|
|
|
+ err := rows.Scan(&bytes)
|
|
|
+ if err != nil {
|
|
|
+ panic(errors.New("You panic for nothing!!!"))
|
|
|
+ }
|
|
|
+ rsltCol = append(rsltCol, string(bytes[:]))
|
|
|
+ }
|
|
|
+ rsltRow = append(rsltRow, rsltCol)
|
|
|
+ rows.Close()
|
|
|
+ }
|
|
|
+ return rsltRow, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *SQL) Close() {
|
|
|
+ s.db.Close()
|
|
|
+}
|