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  }