Skip to content

Commit

Permalink
Bring session API back
Browse files Browse the repository at this point in the history
Fixes #16
  • Loading branch information
zombiezen committed Aug 15, 2021
1 parent c027cfe commit af0400e
Show file tree
Hide file tree
Showing 9 changed files with 1,331 additions and 5 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Expand Up @@ -9,6 +9,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased][]

### Added

- Added back the session API: `Session`, `ChangesetIterator`, `Changegroup`, and
various functions. There are some slight naming changes from the
`crawshaw.io/sqlite` API, but they can all be migrated automatically with the
migration tool. ([#16](https://github.com/zombiezen/go-sqlite/issues/16))

### Removed

- Removed `OpenFlags` that are only used for VFS.
Expand Down
1 change: 1 addition & 0 deletions cmd/zombiezen-sqlite-migrate/README.md
Expand Up @@ -39,6 +39,7 @@ changes beyond changing the import paths to preserve semantics.
written in upper camel case with the type prefixed (e.g. `sqlite.ResultOK`).
- `sqlitex.File` and `sqlitex.Buffer` are in `zombiezen.com/go/sqlite/sqlitefile`
instead of `zombiezen.com/go/sqlite/sqlitex`.
- The **session API** has some symbols renamed for clarity.

[result code]: https://sqlite.org/rescode.html

Expand Down
36 changes: 34 additions & 2 deletions cmd/zombiezen-sqlite-migrate/migrate.go
Expand Up @@ -110,8 +110,28 @@ type symbol struct {
}

var symbolRewrites = map[symbol]symbol{
{crawshaw, "", "ErrorCode"}: {zombiezen, "", "ResultCode"},
{crawshaw, "Conn", "GetAutocommit"}: {zombiezen, "", "AutocommitEnabled"},
{crawshaw, "", "ErrorCode"}: {zombiezen, "", "ResultCode"},
{crawshaw, "", "ChangesetInvert"}: {zombiezen, "", "InvertChangeset"},
{crawshaw, "", "ChangesetConcat"}: {zombiezen, "", "ConcatChangesets"},
{crawshaw, "Conn", "GetAutocommit"}: {zombiezen, "Conn", "AutocommitEnabled"},
{crawshaw, "Conn", "ChangesetApply"}: {zombiezen, "Conn", "ApplyChangeset"},
{crawshaw, "Conn", "ChangesetApplyInverse"}: {zombiezen, "Conn", "ApplyInverseChangeset"},

// Session
{crawshaw, "Session", "Changeset"}: {zombiezen, "Session", "WriteChangeset"},
{crawshaw, "Session", "Patchset"}: {zombiezen, "Session", "WritePatchset"},

// ChangesetIterator
{crawshaw, "", "ChangesetIter"}: {zombiezen, "", "ChangesetIterator"},
{crawshaw, "", "ChangesetIterStart"}: {zombiezen, "", "NewChangesetIterator"},
{crawshaw, "ChangesetIter", "Finalize"}: {zombiezen, "ChangesetIterator", "Close"},
{crawshaw, "ChangesetIter", "Conflict"}: {zombiezen, "ChangesetIterator", "ConflictValue"},
{crawshaw, "ChangesetIter", "FKConflicts"}: {zombiezen, "ChangesetIterator", "ForeignKeyConflicts"},
{crawshaw, "ChangesetIter", "PK"}: {zombiezen, "ChangesetIterator", "PrimaryKey"},

// Changegroup
{crawshaw, "Changegroup", "Delete"}: {zombiezen, "Changegroup", "Clear"},
{crawshaw, "Changegroup", "Output"}: {zombiezen, "Changegroup", "WriteTo"},

// New sqlitefile
{crawshawX, "", "Buffer"}: {zombiezenFile, "", "Buffer"},
Expand Down Expand Up @@ -298,6 +318,18 @@ var symbolRewrites = map[symbol]symbol{
// AuthResult
{crawshaw, "", "SQLITE_DENY"}: {zombiezen, "", "AuthResultDeny"},
{crawshaw, "", "SQLITE_IGNORE"}: {zombiezen, "", "AuthResultIgnore"},

// ConflictType
{crawshaw, "", "SQLITE_CHANGESET_DATA"}: {zombiezen, "", "ChangesetData"},
{crawshaw, "", "SQLITE_CHANGESET_NOTFOUND"}: {zombiezen, "", "ChangesetNotFound"},
{crawshaw, "", "SQLITE_CHANGESET_CONFLICT"}: {zombiezen, "", "ChangesetConflict"},
{crawshaw, "", "SQLITE_CHANGESET_CONSTRAINT"}: {zombiezen, "", "ChangesetConstraint"},
{crawshaw, "", "SQLITE_CHANGESET_FOREIGN_KEY"}: {zombiezen, "", "ChangesetForeignKey"},

// ConflictAction
{crawshaw, "", "SQLITE_CHANGESET_OMIT"}: {zombiezen, "", "ChangesetOmit"},
{crawshaw, "", "SQLITE_CHANGESET_ABORT"}: {zombiezen, "", "ChangesetAbort"},
{crawshaw, "", "SQLITE_CHANGESET_REPLACE"}: {zombiezen, "", "ChangesetReplace"},
}

const (
Expand Down
3 changes: 2 additions & 1 deletion doc.go
Expand Up @@ -36,7 +36,8 @@ https://www.sqlite.org/sharedcache.html
The implementation automatically handles shared cache locking,
see the documentation on Stmt.Step for details.
The optional SQLite 3 extensions compiled in are: FTS5, RTree, JSON1, and GeoPoly.
The optional SQLite 3 extensions compiled in are: session, FTS5, RTree, JSON1,
and GeoPoly.
This is not a database/sql driver. For helper functions that make some kinds of
statements easier to write, see the sqlitex package.
Expand Down
27 changes: 27 additions & 0 deletions example_test.go
Expand Up @@ -4,8 +4,10 @@
package sqlite_test

import (
"bytes"
"context"
"fmt"
"io"
"regexp"

"zombiezen.com/go/sqlite"
Expand Down Expand Up @@ -285,3 +287,28 @@ func ExampleConn_SetAuthorizer() {
// Read-only statement prepared!
// Prepare CREATE TABLE failed with code SQLITE_AUTH
}

// This example shows how to use a changegroup to produce similar results to
// a call to ConcatChangesets.
func ExampleChangegroup() {
// Get changesets from somewhere.
var changeset1, changeset2 io.Reader

// Create a changegroup.
grp := new(sqlite.Changegroup)
defer grp.Clear()

// Add changesets to the changegroup.
if err := grp.Add(changeset1); err != nil {
// Handle error
}
if err := grp.Add(changeset2); err != nil {
// Handle error
}

// Write the changegroup to a buffer.
output := new(bytes.Buffer)
if _, err := grp.WriteTo(output); err != nil {
// Handle error
}
}
4 changes: 2 additions & 2 deletions go.mod
Expand Up @@ -8,6 +8,6 @@ require (
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 // indirect
github.com/google/go-cmp v0.5.3
modernc.org/libc v1.9.5
modernc.org/sqlite v1.10.4
modernc.org/libc v1.9.11
modernc.org/sqlite v1.11.3-0.20210718182236-cb1f916bce97
)
21 changes: 21 additions & 0 deletions go.sum
Expand Up @@ -9,6 +9,7 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
Expand All @@ -19,6 +20,7 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
Expand All @@ -36,28 +38,47 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78 h1:M8tBwCtWD/cZV9DZpFYRUgaymAYAr+aIUTWzDaM3uPs=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU=
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
modernc.org/cc/v3 v3.32.4/go.mod h1:0R6jl1aZlIl2avnYfbfHBS1QB6/f+16mihBObaBC878=
modernc.org/cc/v3 v3.33.6 h1:r63dgSzVzRxUpAJFPQWHy1QeZeY1ydNENUDaBx1GqYc=
modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g=
modernc.org/ccgo/v3 v3.9.2/go.mod h1:gnJpy6NIVqkETT+L5zPsQFj7L2kkhfPMzOghRNv/CFo=
modernc.org/ccgo/v3 v3.9.5 h1:dEuUSf8WN51rDkprFuAqjfchKEzN0WttP/Py3enBwjk=
modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60=
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
modernc.org/libc v1.7.13-0.20210308123627-12f642a52bb8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
modernc.org/libc v1.9.5 h1:zv111ldxmP7DJ5mOIqzRbza7ZDl3kh4ncKfASB2jIYY=
modernc.org/libc v1.9.5/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w=
modernc.org/libc v1.9.11 h1:QUxZMs48Ahg2F7SN41aERvMfGLY2HU/ADnB9DC4Yts8=
modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q=
modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.2.2 h1:+yFk8hBprV+4c0U9GjFtL+dV3N8hOJ8JCituQcMShFY=
modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/mathutil v1.4.0 h1:GCjoRaBew8ECCKINQA2nYjzvufFW9YiEuuB+rQ9bn2E=
modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/memory v1.0.4 h1:utMBrFcpnQDdNsmM6asmyH/FM9TqLPS7XF7otpJmrwM=
modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc=
modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A=
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sqlite v1.10.4 h1:9F56ybDEGQAk7yNM94l/n9p2M1C5Tcp076RH0UDhwUw=
modernc.org/sqlite v1.10.4/go.mod h1:Z9FEjUtZP4qFEg6/SiADg9XCER7aYy9a/j7Pg9P7CPs=
modernc.org/sqlite v1.11.3-0.20210718182236-cb1f916bce97 h1:gNxWpo4rBLNmEOkn2DBBeJEpa1Y0a+eoIr/MHbfNLTs=
modernc.org/sqlite v1.11.3-0.20210718182236-cb1f916bce97/go.mod h1:+mhs/P1ONd+6G7hcAs6irwDi/bjTQ7nLW6LHRBsEa3A=
modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs=
modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs=
modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
modernc.org/tcl v1.5.2/go.mod h1:pmJYOLgpiys3oI4AeAafkcUfE+TKKilminxNyU/+Zlo=
modernc.org/tcl v1.5.5/go.mod h1:ADkaTUuwukkrlhqwERyq0SM8OvyXo7+TjFz7yAF56EI=
modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk=
modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/z v1.0.1-0.20210308123920-1f282aa71362/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=
modernc.org/z v1.0.1/go.mod h1:8/SRk5C/HgiQWCgXdfpb+1RvhORdkz5sw72d3jjtyqA=

0 comments on commit af0400e

Please sign in to comment.