Ver Fonte

replace connect.go by mysql.go
connect/insert/update/delete/select => OK

Sylvrec há 4 anos atrás
pai
commit
599cafbd54
3 ficheiros alterados com 202 adições e 149 exclusões
  1. 0 146
      mysqltojson/sql/connect.go
  2. 192 0
      mysqltojson/sql/mysql.go
  3. 10 3
      mysqltojson/sql/sql_test.go

+ 0 - 146
mysqltojson/sql/connect.go

@@ -1,146 +0,0 @@
-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 NewSQL(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
-return nombre d'insert
-*/
-func (s *SQL) Insert(table string, cols []string, values [][]string) error {
-	if cols != nil {
-		for _, v := range values {
-			if len(v) != len(cols) {
-				return errors.New("") // Il n'y a pas le meme nombre de cols dans une ou plusieurs ligne de values
-			}
-		}
-	}
-	flgA := 0
-	flgB := 0
-	lines := ""
-	for _, value := range values {
-		if flgB != 0 {
-			lines += ", "
-		}
-		lines += "("
-		for i := 0; i < len(value); i++ {
-			if flgA != 0 {
-				lines += ", "
-			}
-			if value[i] != "" {
-				lines += "'" + value[i] + "'"
-			} else {
-				lines += "null"
-			}
-			flgA = 1
-		}
-		lines += ")"
-		flgB = 1
-		flgA = 0
-	}
-	sql := "INSERT INTO " + table + " VALUES " + lines + ";"
-	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 wheres == nil {
-		return errors.New("") // Aucune condition
-	}
-	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 wheres == nil {
-		return errors.New("") // Aucune condition
-	}
-	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
-}
-
-func (s *SQL) Select(query string) error {
-	if (query == "") || (!strings.Contains(query, "SELECT")) ||
-		(strings.Count(query, ";") != 1 && strings.Index(query, ";")+1 != len(query)) {
-		return errors.New("") // query format incorrect
-	}
-	slct, err := s.db.Query(query)
-	if err != nil || slct.Err() != nil {
-		return errors.New("") // retour select incorrect
-	}
-	//
-	return nil
-}
-
-func (s *SQL) Close() {
-
-}

+ 192 - 0
mysqltojson/sql/mysql.go

@@ -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()
+}

+ 10 - 3
mysqltojson/sql/sql_test.go

@@ -4,19 +4,26 @@ import "testing"
 
 // TestConnect ...
 func TestConnect(t *testing.T) {
-	db := NewSQL("sylvrec.com:3306", "test", "test", "test")
+	db := NewMySQL("sylvrec.com:3306", "test", "test", "test")
 	db.Close()
 }
 
 func TestCRUD(t *testing.T) {
-	db := NewSQL("sylvrec.com:3306", "test", "test", "test")
+	db := NewMySQL("sylvrec.com:3306", "test", "test", "test")
 	var values [][]string
 	values = append(values, []string{"", "WuYu", "Kawai"})
-	errInsert := db.Insert("test", nil, values)
+	errInsert := db.Insert("test", []string{"id", "nom", "prenom"}, values)
 	if errInsert != nil {
 		t.Errorf("Expected err=nil, %#v", errInsert)
 		return
 	}
+	var colvalues [][]string
+	colvalues = append(colvalues, []string{"nom", "WuYu"})
+	rslt, errSelect := db.SelectAND("test", colvalues)
+	if rslt == nil || rslt[1][1] != "WuYu" {
+		t.Errorf("Expected err=nil, %#v", errSelect)
+		return
+	}
 	var vals [][]string
 	var sets [][]string
 	sets = append(sets, []string{"nom", "YoYo"})