github.com/cznic/ql@v1.2.1-0.20181122101857-b60735abf8a0/driver/all_test.go (about) 1 // Copyright 2014 The ql Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package driver 6 7 import ( 8 "database/sql" 9 "fmt" 10 "io/ioutil" 11 "os" 12 "path/filepath" 13 ) 14 15 func Example_testFile() { 16 dir, err := ioutil.TempDir("", "ql-driver-test") 17 if err != nil { 18 return 19 } 20 21 defer func() { 22 os.RemoveAll(dir) 23 }() 24 25 db, err := sql.Open("ql", filepath.Join(dir, "ql.db")) 26 if err != nil { 27 return 28 } 29 30 defer func() { 31 if err := db.Close(); err != nil { 32 return 33 } 34 35 fmt.Println("OK") 36 }() 37 38 tx, err := db.Begin() 39 if err != nil { 40 return 41 } 42 43 if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil { 44 return 45 } 46 47 result, err := tx.Exec(` 48 INSERT INTO t VALUES 49 ($1, $2), 50 ($3, $4), 51 ; 52 `, 53 42, "foo", 54 314, "bar", 55 ) 56 if err != nil { 57 return 58 } 59 60 if err = tx.Commit(); err != nil { 61 return 62 } 63 64 id, err := result.LastInsertId() 65 if err != nil { 66 return 67 } 68 69 aff, err := result.RowsAffected() 70 if err != nil { 71 return 72 } 73 74 fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff) 75 76 rows, err := db.Query("SELECT * FROM t;") 77 if err != nil { 78 return 79 } 80 81 cols, err := rows.Columns() 82 if err != nil { 83 return 84 } 85 86 fmt.Printf("Columns: %v\n", cols) 87 88 var data struct { 89 Qty int 90 Name string 91 } 92 93 for rows.Next() { 94 if err = rows.Scan(&data.Qty, &data.Name); err != nil { 95 rows.Close() 96 break 97 } 98 99 fmt.Printf("%+v\n", data) 100 } 101 102 if err = rows.Err(); err != nil { 103 return 104 } 105 106 // Output: 107 // LastInsertId 2, RowsAffected 2 108 // Columns: [Qty Name] 109 // {Qty:314 Name:bar} 110 // {Qty:42 Name:foo} 111 // OK 112 } 113 114 func Example_testFile2() { 115 dir, err := ioutil.TempDir("", "ql-driver-test") 116 if err != nil { 117 return 118 } 119 120 defer func() { 121 os.RemoveAll(dir) 122 }() 123 124 db, err := sql.Open("ql2", filepath.Join(dir, "ql2.db")) 125 if err != nil { 126 return 127 } 128 129 defer func() { 130 if err := db.Close(); err != nil { 131 return 132 } 133 134 fmt.Println("OK") 135 }() 136 137 tx, err := db.Begin() 138 if err != nil { 139 return 140 } 141 142 if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil { 143 return 144 } 145 146 result, err := tx.Exec(` 147 INSERT INTO t VALUES 148 ($1, $2), 149 ($3, $4), 150 ; 151 `, 152 42, "foo", 153 314, "bar", 154 ) 155 if err != nil { 156 return 157 } 158 159 if err = tx.Commit(); err != nil { 160 return 161 } 162 163 id, err := result.LastInsertId() 164 if err != nil { 165 return 166 } 167 168 aff, err := result.RowsAffected() 169 if err != nil { 170 return 171 } 172 173 fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff) 174 175 rows, err := db.Query("SELECT * FROM t;") 176 if err != nil { 177 return 178 } 179 180 cols, err := rows.Columns() 181 if err != nil { 182 return 183 } 184 185 fmt.Printf("Columns: %v\n", cols) 186 187 var data struct { 188 Qty int 189 Name string 190 } 191 192 for rows.Next() { 193 if err = rows.Scan(&data.Qty, &data.Name); err != nil { 194 rows.Close() 195 break 196 } 197 198 fmt.Printf("%+v\n", data) 199 } 200 201 if err = rows.Err(); err != nil { 202 return 203 } 204 205 // Output: 206 // LastInsertId 2, RowsAffected 2 207 // Columns: [Qty Name] 208 // {Qty:314 Name:bar} 209 // {Qty:42 Name:foo} 210 // OK 211 } 212 213 func Example_testMem() { 214 db, err := sql.Open("ql-mem", "mem.db") 215 if err != nil { 216 return 217 } 218 219 defer func() { 220 if err := db.Close(); err != nil { 221 return 222 } 223 224 fmt.Println("OK") 225 }() 226 227 tx, err := db.Begin() 228 if err != nil { 229 return 230 } 231 232 if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil { 233 return 234 } 235 236 result, err := tx.Exec(` 237 INSERT INTO t VALUES 238 ($1, $2), 239 ($3, $4), 240 ; 241 `, 242 1042, "foo-mem", 243 1314, "bar-mem", 244 ) 245 if err != nil { 246 return 247 } 248 249 if err = tx.Commit(); err != nil { 250 return 251 } 252 253 id, err := result.LastInsertId() 254 if err != nil { 255 return 256 } 257 258 aff, err := result.RowsAffected() 259 if err != nil { 260 return 261 } 262 263 fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff) 264 265 rows, err := db.Query("SELECT * FROM t;") 266 if err != nil { 267 return 268 } 269 270 cols, err := rows.Columns() 271 if err != nil { 272 return 273 } 274 275 fmt.Printf("Columns: %v\n", cols) 276 277 var data struct { 278 Qty int 279 Name string 280 } 281 282 for rows.Next() { 283 if err = rows.Scan(&data.Qty, &data.Name); err != nil { 284 rows.Close() 285 break 286 } 287 288 fmt.Printf("%+v\n", data) 289 } 290 291 if err = rows.Err(); err != nil { 292 return 293 } 294 295 // Output: 296 // LastInsertId 2, RowsAffected 2 297 // Columns: [Qty Name] 298 // {Qty:1314 Name:bar-mem} 299 // {Qty:1042 Name:foo-mem} 300 // OK 301 }