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  }