| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright 2021 Ross Light
- // SPDX-License-Identifier: ISC
- package sqlitex
- import (
- "errors"
- "zombiezen.com/go/sqlite"
- )
- var errNoResults = errors.New("sqlite: statement has no results")
- var errMultipleResults = errors.New("sqlite: statement has multiple result rows")
- func resultSetup(stmt *sqlite.Stmt) error {
- hasRow, err := stmt.Step()
- if err != nil {
- stmt.Reset()
- return err
- }
- if !hasRow {
- stmt.Reset()
- return errNoResults
- }
- return nil
- }
- func resultTeardown(stmt *sqlite.Stmt) error {
- hasRow, err := stmt.Step()
- if err != nil {
- stmt.Reset()
- return err
- }
- if hasRow {
- stmt.Reset()
- return errMultipleResults
- }
- return stmt.Reset()
- }
- func ResultBool(stmt *sqlite.Stmt) (bool, error) {
- res, err := ResultInt64(stmt)
- return res != 0, err
- }
- func ResultInt(stmt *sqlite.Stmt) (int, error) {
- res, err := ResultInt64(stmt)
- return int(res), err
- }
- func ResultInt64(stmt *sqlite.Stmt) (int64, error) {
- if err := resultSetup(stmt); err != nil {
- return 0, err
- }
- res := stmt.ColumnInt64(0)
- if err := resultTeardown(stmt); err != nil {
- return 0, err
- }
- return res, nil
- }
- func ResultText(stmt *sqlite.Stmt) (string, error) {
- if err := resultSetup(stmt); err != nil {
- return "", err
- }
- res := stmt.ColumnText(0)
- if err := resultTeardown(stmt); err != nil {
- return "", err
- }
- return res, nil
- }
- func ResultFloat(stmt *sqlite.Stmt) (float64, error) {
- if err := resultSetup(stmt); err != nil {
- return 0, err
- }
- res := stmt.ColumnFloat(0)
- if err := resultTeardown(stmt); err != nil {
- return 0, err
- }
- return res, nil
- }
|