@@ -133,83 +133,57 @@ func (ci *ChangesetIterator) Op() (tblName string, numCol int, oper int, indirec
133
133
134
134
// Old retrieves the old value for the specified column in the change payload.
135
135
func (ci * ChangesetIterator ) Old (dest []any ) error {
136
- for i := 0 ; i < len (dest ); i ++ {
137
- var val * C.sqlite3_value
138
- var src any
139
-
140
- rc := C .sqlite3changeset_old (ci .iter , C .int (i ), & val )
141
- if rc != C .SQLITE_OK {
142
- return fmt .Errorf ("sqlite3changeset_old: %s" , C .GoString (C .sqlite3_errstr (rc )))
143
- }
136
+ return ci .row (dest , true )
137
+ }
144
138
145
- switch C .sqlite3_value_type (val ) {
146
- case C .SQLITE_INTEGER :
147
- src = int64 (C .sqlite3_value_int64 (val ))
148
- case C .SQLITE_FLOAT :
149
- src = float64 (C .sqlite3_value_double (val ))
150
- case C .SQLITE_BLOB :
151
- len := C .sqlite3_value_bytes (val )
152
- blobptr := C .sqlite3_value_blob (val )
153
- src = C .GoBytes (blobptr , len )
154
- case C .SQLITE_TEXT :
155
- len := C .sqlite3_value_bytes (val )
156
- cstrptr := unsafe .Pointer (C .sqlite3_value_text (val ))
157
- src = C .GoBytes (cstrptr , len )
158
- case C .SQLITE_NULL :
159
- src = nil
160
- }
139
+ // New retrieves the new value for the specified column in the change payload.
140
+ func (ci * ChangesetIterator ) New (dest []any ) error {
141
+ return ci .row (dest , false )
142
+ }
161
143
162
- err := convertAssign (& dest [i ], src )
163
- if err != nil {
164
- return err
144
+ // Finalize deletes a changeset iterator.
145
+ func (ci * ChangesetIterator ) Finalize () error {
146
+ if ci .iter != nil {
147
+ rc := C .sqlite3changeset_finalize (ci .iter )
148
+ ci .iter = nil
149
+ if rc != C .SQLITE_OK {
150
+ return fmt .Errorf ("sqlite3changeset_finalize: %s" , C .GoString (C .sqlite3_errstr (rc )))
165
151
}
166
152
}
167
153
return nil
168
154
}
169
155
170
156
// New retrieves the new value for the specified column in the change payload.
171
- func (ci * ChangesetIterator ) New (dest []any ) error {
157
+ func (ci * ChangesetIterator ) row (dest []any , old bool ) error {
158
+ var val * C.sqlite3_value
159
+ var rc C.int
172
160
for i := 0 ; i < len (dest ); i ++ {
173
- var val * C.sqlite3_value
174
- var src any
175
-
176
- rc := C .sqlite3changeset_new (ci .iter , C .int (i ), & val )
161
+ fn := ""
162
+ if old {
163
+ fn = "old"
164
+ rc = C .sqlite3changeset_old (ci .iter , C .int (i ), & val )
165
+ } else {
166
+ fn = "new"
167
+ rc = C .sqlite3changeset_new (ci .iter , C .int (i ), & val )
168
+ }
177
169
if rc != C .SQLITE_OK {
178
- return fmt .Errorf ("sqlite3changeset_new : %s" , C .GoString (C .sqlite3_errstr (rc )))
170
+ return fmt .Errorf ("sqlite3changeset_%s : %s" , fn , C .GoString (C .sqlite3_errstr (rc )))
179
171
}
180
172
181
173
switch C .sqlite3_value_type (val ) {
182
174
case C .SQLITE_INTEGER :
183
- src = int64 (C .sqlite3_value_int64 (val ))
175
+ dest [ i ] = int64 (C .sqlite3_value_int64 (val ))
184
176
case C .SQLITE_FLOAT :
185
- src = float64 (C .sqlite3_value_double (val ))
177
+ dest [ i ] = float64 (C .sqlite3_value_double (val ))
186
178
case C .SQLITE_BLOB :
187
179
len := C .sqlite3_value_bytes (val )
188
180
blobptr := C .sqlite3_value_blob (val )
189
- src = C .GoBytes (blobptr , len )
181
+ dest [ i ] = C .GoBytes (blobptr , len )
190
182
case C .SQLITE_TEXT :
191
- len := C .sqlite3_value_bytes (val )
192
183
cstrptr := unsafe .Pointer (C .sqlite3_value_text (val ))
193
- src = C .GoBytes ( cstrptr , len )
184
+ dest [ i ] = C .GoString (( * C . char )( cstrptr ) )
194
185
case C .SQLITE_NULL :
195
- src = nil
196
- }
197
-
198
- err := convertAssign (& dest [i ], src )
199
- if err != nil {
200
- return err
201
- }
202
- }
203
- return nil
204
- }
205
-
206
- // Finalize deletes a changeset iterator.
207
- func (ci * ChangesetIterator ) Finalize () error {
208
- if ci .iter != nil {
209
- rc := C .sqlite3changeset_finalize (ci .iter )
210
- ci .iter = nil
211
- if rc != C .SQLITE_OK {
212
- return fmt .Errorf ("sqlite3changeset_finalize: %s" , C .GoString (C .sqlite3_errstr (rc )))
186
+ dest [i ] = nil
213
187
}
214
188
}
215
189
return nil
0 commit comments