@@ -87,6 +87,64 @@ func TestOpen(t *testing.T) {
87
87
}
88
88
}
89
89
90
+ func TestOpenNoCreate (t * testing.T ) {
91
+ filename := t .Name () + ".sqlite"
92
+
93
+ if err := os .Remove (filename ); err != nil && ! os .IsNotExist (err ) {
94
+ t .Fatal (err )
95
+ }
96
+ defer os .Remove (filename )
97
+
98
+ // https://golang.org/pkg/database/sql/#Open
99
+ // "Open may just validate its arguments without creating a connection
100
+ // to the database. To verify that the data source name is valid, call Ping."
101
+ db , err := sql .Open ("sqlite3" , fmt .Sprintf ("file:%s?mode=rw" , filename ))
102
+ if err == nil {
103
+ defer db .Close ()
104
+
105
+ err = db .Ping ()
106
+ if err == nil {
107
+ t .Fatal ("expected error from Open or Ping" )
108
+ }
109
+ }
110
+
111
+ sqlErr , ok := err .(Error )
112
+ if ! ok {
113
+ t .Fatalf ("expected *Error, but got %T" , err )
114
+ }
115
+
116
+ if sqlErr .Code != ErrCantOpen {
117
+ t .Fatalf ("expected SQLITE_CANTOPEN, but got %v" , sqlErr )
118
+ }
119
+
120
+ // make sure database file truly was not created
121
+ if _ , err := os .Stat (filename ); ! os .IsNotExist (err ) {
122
+ if err != nil {
123
+ t .Fatal (err )
124
+ }
125
+ t .Fatal ("expected database file to not exist" )
126
+ }
127
+
128
+ // verify that it works if the mode is "rwc" instead
129
+ db , err = sql .Open ("sqlite3" , fmt .Sprintf ("file:%s?mode=rwc" , filename ))
130
+ if err != nil {
131
+ t .Fatal (err )
132
+ }
133
+ defer db .Close ()
134
+
135
+ if err := db .Ping (); err != nil {
136
+ t .Fatal (err )
137
+ }
138
+
139
+ // make sure database file truly was created
140
+ if _ , err := os .Stat (filename ); err != nil {
141
+ if ! os .IsNotExist (err ) {
142
+ t .Fatal (err )
143
+ }
144
+ t .Fatal ("expected database file to exist" )
145
+ }
146
+ }
147
+
90
148
func TestReadonly (t * testing.T ) {
91
149
tempFilename := TempFilename (t )
92
150
defer os .Remove (tempFilename )
0 commit comments