github.com/runner-mei/ql@v1.1.0/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_testMem() { 115 db, err := sql.Open("ql-mem", "mem.db") 116 if err != nil { 117 return 118 } 119 120 defer func() { 121 if err := db.Close(); err != nil { 122 return 123 } 124 125 fmt.Println("OK") 126 }() 127 128 tx, err := db.Begin() 129 if err != nil { 130 return 131 } 132 133 if _, err := tx.Exec("CREATE TABLE t (Qty int, Name string);"); err != nil { 134 return 135 } 136 137 result, err := tx.Exec(` 138 INSERT INTO t VALUES 139 ($1, $2), 140 ($3, $4), 141 ; 142 `, 143 1042, "foo-mem", 144 1314, "bar-mem", 145 ) 146 if err != nil { 147 return 148 } 149 150 if err = tx.Commit(); err != nil { 151 return 152 } 153 154 id, err := result.LastInsertId() 155 if err != nil { 156 return 157 } 158 159 aff, err := result.RowsAffected() 160 if err != nil { 161 return 162 } 163 164 fmt.Printf("LastInsertId %d, RowsAffected %d\n", id, aff) 165 166 rows, err := db.Query("SELECT * FROM t;") 167 if err != nil { 168 return 169 } 170 171 cols, err := rows.Columns() 172 if err != nil { 173 return 174 } 175 176 fmt.Printf("Columns: %v\n", cols) 177 178 var data struct { 179 Qty int 180 Name string 181 } 182 183 for rows.Next() { 184 if err = rows.Scan(&data.Qty, &data.Name); err != nil { 185 rows.Close() 186 break 187 } 188 189 fmt.Printf("%+v\n", data) 190 } 191 192 if err = rows.Err(); err != nil { 193 return 194 } 195 196 // Output: 197 // LastInsertId 2, RowsAffected 2 198 // Columns: [Qty Name] 199 // {Qty:1314 Name:bar-mem} 200 // {Qty:1042 Name:foo-mem} 201 // OK 202 }