-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlite.tcl
115 lines (95 loc) · 2.29 KB
/
sqlite.tcl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# sqlite.tcl --
#
# sqlite3 connectivity module.
#
# Copyright (c) 2013 by Nagarajan Chinnasamy <nagarajanchinnasamy@gmail.com>
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
namespace eval ::tdao::dbc::sqlite {
variable count 0
}
proc ::tdao::dbc::sqlite::Load {} {
package require sqlite3
}
proc ::tdao::dbc::sqlite::open {location {initscript ""}} {
incr count
set conn [format "%s%s%s" [namespace current] "___conn" $count]
if {[catch {sqlite3 $conn $location} err]} {
return -code error $err
}
if {$initscript != ""} {
uplevel 1 $conn eval $initscript
}
return $conn
}
proc ::tdao::dbc::sqlite::close {conn} {
catch {$conn close}
}
proc ::tdao::dbc::sqlite::get {conn stmt fieldslist {format "dict"}} {
set recordslist ""
switch -- $format {
dict {
if {[catch {
$conn eval $stmt record {
array unset record "\\*"
lappend recordslist [array get record]
}} err]} {
return -code error $err
}
}
llist {
if {[catch {
$conn eval $stmt record {
array unset record "\\*"
lappend recordslist [dict values [array get record]]
}} err]} {
return -code error $err
}
}
list {
if {[catch {$conn eval $stmt} result]} {
return -code error $result
}
set recordslist $result
}
}
return $recordslist
}
proc ::tdao::dbc::sqlite::insert {conn stmt {sequence_fields ""}} {
if {[catch {$conn eval $stmt} result]} {
return -code error $result
}
set status [$conn changes]
if {$sequence_fields == ""} {
return $status
}
set sequence_values [dict create]
set rowid [$conn last_insert_rowid]
foreach fname $sequence_fields {
dict set sequence_values $fname $rowid
}
return [list $status $sequence_values]
}
proc ::tdao::dbc::sqlite::update {conn stmt} {
if {[catch {$conn eval $stmt} err]} {
return -code error $err
}
return [$conn changes]
}
proc ::tdao::dbc::sqlite::delete {conn stmt} {
if {[catch {$conn eval $stmt} err]} {
return -code error $err
}
return [$conn changes]
}
proc ::tdao::dbc::sqlite::begin {conn {lock deferred}} {
$conn eval begin $lock
}
proc ::tdao::dbc::sqlite::commit {conn} {
$conn eval commit
}
proc ::tdao::dbc::sqlite::rollback {conn} {
$conn eval rollback
}
package provide tdao::dbc::sqlite 0.1.1