mysql.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package sql
  2. import (
  3. "database/sql"
  4. "errors"
  5. "strings"
  6. // _ "github.com/go-sql-driver/mysql"
  7. _ "github.com/go-sql-driver/mysql"
  8. )
  9. //SQL ...
  10. type SQL struct {
  11. db *sql.DB
  12. err error
  13. }
  14. // NewSQL ...
  15. func NewMySQL(server, login, mdp, base string) *SQL {
  16. db, err := Connect(server, login, mdp, base)
  17. if err != nil {
  18. panic(err.Error())
  19. }
  20. s := new(SQL)
  21. s.db = db
  22. s.err = err
  23. return s
  24. }
  25. func Connect(server, login, mdp, base string) (*sql.DB, error) {
  26. db, err := sql.Open("mysql", login+":"+mdp+"@tcp("+server+")/"+base)
  27. return db, err
  28. }
  29. /* INSERT
  30. */
  31. func (s *SQL) Insert(table string, columns []string, values [][]string) error {
  32. if len(table) <= 0 || values == nil {
  33. return errors.New("") // parametre incorrect
  34. }
  35. if columns != nil {
  36. for _, v := range values {
  37. if len(v) != len(columns) {
  38. return errors.New("") // Il n'y a pas le meme nombre de colonnes dans une ou plusieurs ligne de values
  39. }
  40. }
  41. }
  42. if values == nil {
  43. return errors.New("") // no values
  44. }
  45. cols := "("
  46. if columns != nil {
  47. for i, column := range columns {
  48. if i != 0 {
  49. cols += ", "
  50. }
  51. cols += column
  52. }
  53. cols += ")"
  54. }
  55. vals := ""
  56. for j, value := range values {
  57. if j != 0 {
  58. vals += ", "
  59. }
  60. vals += "("
  61. for i := 0; i < len(value); i++ {
  62. if i != 0 {
  63. vals += ", "
  64. }
  65. if value[i] != "" {
  66. vals += "'" + value[i] + "'"
  67. } else {
  68. vals += "null"
  69. }
  70. }
  71. vals += ")"
  72. }
  73. sql := "INSERT INTO " + table
  74. if columns != nil {
  75. sql += " " + cols + " VALUES " + vals + ";"
  76. } else {
  77. sql += " VALUES " + vals + ";"
  78. }
  79. insert, err := s.db.Query(sql)
  80. if err != nil || insert.Err() != nil {
  81. return errors.New("error syntax : " + sql) // Error syntax sql
  82. }
  83. defer insert.Close()
  84. return nil
  85. }
  86. func (s *SQL) DeleteAND(table string, wheres [][]string) error {
  87. if len(table) <= 0 || wheres == nil {
  88. return errors.New("") // parametre incorrect
  89. }
  90. lines := ""
  91. flag := 0
  92. for _, where := range wheres {
  93. if flag != 0 {
  94. lines += " AND "
  95. }
  96. lines += where[0] + " = '" + where[1] + "'"
  97. flag = 1
  98. }
  99. sql := "DELETE FROM " + table + " WHERE " + lines + ";"
  100. delete, err := s.db.Query(sql)
  101. if err != nil || delete.Err() != nil {
  102. return errors.New("error syntax : " + sql) // Error syntax
  103. }
  104. defer delete.Close()
  105. return nil
  106. }
  107. func (s *SQL) UpdateAND(table string, sets [][]string, wheres [][]string) error {
  108. if len(table) <= 0 || sets == nil || wheres == nil {
  109. return errors.New("") //parametre incorrect
  110. }
  111. conds := ""
  112. flag := 0
  113. for _, where := range wheres {
  114. if flag != 0 {
  115. conds += " AND "
  116. }
  117. conds += where[0] + " = '" + where[1] + "'"
  118. flag = 1
  119. }
  120. vls := ""
  121. flagA := 0
  122. for _, set := range sets {
  123. if flagA != 0 {
  124. vls += ", "
  125. }
  126. vls += set[0] + " = '" + set[1] + "'"
  127. flagA = 1
  128. }
  129. sql := "UPDATE " + table + " SET " + vls + " WHERE " + conds + ";"
  130. update, err := s.db.Query(sql)
  131. if err != nil || update.Err() != nil {
  132. return errors.New("error syntax : " + sql) // Error syntax
  133. }
  134. defer update.Close()
  135. return nil
  136. }
  137. /*
  138. Select
  139. @return [column][row]string, error
  140. */
  141. func (s *SQL) SelectAND(table string, colvals [][]string) ([][]string, error) {
  142. if len(table) <= 0 {
  143. return nil, errors.New("") // parameter incorrect
  144. }
  145. var rsltRow [][]string
  146. var requete string = "SELECT * FROM " + table
  147. if colvals != nil {
  148. requete += " WHERE "
  149. for i, colval := range colvals {
  150. if i != 0 {
  151. requete += " AND "
  152. }
  153. if strings.IndexRune(colval[1], '*') > 0 {
  154. requete += colval[0] + " LIKE '" + colval[1] + "'"
  155. } else {
  156. requete += colval[0] + " = '" + colval[1] + "'"
  157. }
  158. }
  159. }
  160. requete += ";"
  161. rcolumns, _ := s.db.Query(requete)
  162. columns, _ := rcolumns.ColumnTypes()
  163. for _, column := range columns {
  164. rows, _ := s.db.Query(strings.Replace(requete, "*", column.Name(), 1))
  165. var bytes []byte
  166. var rsltCol []string
  167. rsltCol = append(rsltCol, column.Name())
  168. for rows.Next() {
  169. err := rows.Scan(&bytes)
  170. if err != nil {
  171. panic(errors.New("You panic for nothing!!!"))
  172. }
  173. rsltCol = append(rsltCol, string(bytes[:]))
  174. }
  175. rsltRow = append(rsltRow, rsltCol)
  176. defer rows.Close()
  177. }
  178. return rsltRow, nil
  179. }
  180. func (s *SQL) Close() {
  181. defer s.db.Close()
  182. }