Skip to content

Commit 2a0ca73

Browse files
committed
More OK compilation
1 parent 2c404ee commit 2a0ca73

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

sqlite3_session.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,16 @@ func (s *Session) DeleteSession() error {
6565
return nil
6666
}
6767

68-
type ChangesetIter struct {
68+
type Changeset struct {
69+
cs []byte
70+
}
71+
72+
type ChangesetIterator struct {
6973
iter *C.sqlite3_changeset_iter
7074
}
7175

7276
// Changeset generates a changeset from a session object.
73-
func (s *Session) Changeset() ([]byte, error) {
77+
func (s *Session) Changeset() (*Changeset, error) {
7478
var nChangeset C.int
7579
var pChangeset unsafe.Pointer
7680

@@ -81,13 +85,13 @@ func (s *Session) Changeset() ([]byte, error) {
8185
}
8286
defer C.sqlite3_free(pChangeset) // Free the changeset buffer after use
8387

84-
// Convert the C buffer to a Go byte slice
88+
// copy the changeset buffer to a Go byte slice, because cgo can nuke its memory at any time
8589
changeset := C.GoBytes(pChangeset, nChangeset)
86-
return changeset, nil
90+
return &Changeset{cs: changeset}, nil
8791
}
8892

8993
// ChangesetStart creates and initializes a changeset iterator.
90-
func ChangesetStart(changeset []byte) (*ChangesetIter, error) {
94+
func ChangesetStart(changeset []byte) (*ChangesetIterator, error) {
9195
var iter *C.sqlite3_changeset_iter
9296

9397
// Call sqlite3changeset_start
@@ -96,11 +100,15 @@ func ChangesetStart(changeset []byte) (*ChangesetIter, error) {
96100
return nil, fmt.Errorf("sqlite3changeset_start: %s", C.GoString(C.sqlite3_errstr(rc)))
97101
}
98102

99-
return &ChangesetIter{iter: iter}, nil
103+
return &ChangesetIterator{iter: iter}, nil
104+
}
105+
106+
func (cs *Changeset) Start() (*ChangesetIterator, error) {
107+
return ChangesetStart(cs.cs)
100108
}
101109

102110
// ChangesetNext moves the changeset iterator to the next change.
103-
func (ci *ChangesetIter) ChangesetNext() (bool, error) {
111+
func (ci *ChangesetIterator) ChangesetNext() (bool, error) {
104112
rc := C.sqlite3changeset_next(ci.iter)
105113
if rc == C.SQLITE_DONE {
106114
return false, nil // No more changes
@@ -112,7 +120,7 @@ func (ci *ChangesetIter) ChangesetNext() (bool, error) {
112120
}
113121

114122
// ChangesetOp returns the type of change (INSERT, UPDATE, or DELETE) that the iterator points to.
115-
func (ci *ChangesetIter) ChangesetOp() (string, int, int, bool, error) {
123+
func (ci *ChangesetIterator) ChangesetOp() (string, int, int, bool, error) {
116124
var tableName *C.char
117125
var nCol C.int
118126
var op C.int
@@ -127,7 +135,7 @@ func (ci *ChangesetIter) ChangesetOp() (string, int, int, bool, error) {
127135
}
128136

129137
// ChangesetOld retrieves the old value for the specified column in the change payload.
130-
func (ci *ChangesetIter) ChangesetOld(column int) (*C.sqlite3_value, error) {
138+
func (ci *ChangesetIterator) ChangesetOld(column int) (*C.sqlite3_value, error) {
131139
var value *C.sqlite3_value
132140

133141
rc := C.sqlite3changeset_old(ci.iter, C.int(column), &value)
@@ -139,7 +147,7 @@ func (ci *ChangesetIter) ChangesetOld(column int) (*C.sqlite3_value, error) {
139147
}
140148

141149
// ChangesetNew retrieves the new value for the specified column in the change payload.
142-
func (ci *ChangesetIter) ChangesetNew(column int) (*C.sqlite3_value, error) {
150+
func (ci *ChangesetIterator) ChangesetNew(column int) (*C.sqlite3_value, error) {
143151
var value *C.sqlite3_value
144152

145153
rc := C.sqlite3changeset_new(ci.iter, C.int(column), &value)
@@ -151,7 +159,7 @@ func (ci *ChangesetIter) ChangesetNew(column int) (*C.sqlite3_value, error) {
151159
}
152160

153161
// ChangesetFinalize deletes a changeset iterator.
154-
func (ci *ChangesetIter) ChangesetFinalize() error {
162+
func (ci *ChangesetIterator) ChangesetFinalize() error {
155163
if ci.iter != nil {
156164
rc := C.sqlite3changeset_finalize(ci.iter)
157165
ci.iter = nil // Prevent double finalization

0 commit comments

Comments
 (0)