dotsql

A Golang library for using SQL.

  • Owner: qustavo/dotsql
  • Platform:
  • License:: GNU General Public License v2.0
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

dotsql
GoDoc
Build Status
Test coverage
Go Report Card

A Golang library for using SQL.

It is not an ORM, it is not a query builder. Dotsql is a library that helps you
keep sql files in one place and use it with ease.

Dotsql is heavily inspired by yesql.

Installation

$ go get github.com/gchaincl/dotsql

Usage

First of all, you need to define queries inside your sql file:

-- name: create-users-table
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    name VARCHAR(255),
    email VARCHAR(255)
);

-- name: create-user
INSERT INTO users (name, email) VALUES(?, ?)

-- name: find-users-by-email
SELECT id,name,email FROM users WHERE email = ?

-- name: find-one-user-by-email
SELECT id,name,email FROM users WHERE email = ? LIMIT 1

--name: drop-users-table
DROP TABLE users

Notice that every query has a name tag (--name:<some name>),
this is needed to be able to uniquely identify each query
inside dotsql.

With your sql file prepared, you can load it up and start utilizing your queries:

// Get a database handle
db, err := sql.Open("sqlite3", ":memory:")

// Loads queries from file
dot, err := dotsql.LoadFromFile("queries.sql")

// Run queries
res, err := dot.Exec(db, "create-users-table")
res, err := dot.Exec(db, "create-user", "User Name", "main@example.com")
rows, err := dot.Query(db, "find-users-by-email", "main@example.com")
row, err := dot.QueryRow(db, "find-one-user-by-email", "user@example.com")

stmt, err := dot.Prepare(db, "drop-users-table")
result, err := stmt.Exec()

You can also merge multiple dotsql instances created from different sql file inputs:

dot1, err := dotsql.LoadFromFile("queries1.sql")
dot2, err := dotsql.LoadFromFile("queries2.sql")
dot := dotsql.Merge(dot1, dot2)

Embeding

To avoid distributing sql files alongside the binary file, you will need to use tools like
gotic to embed / pack everything into one file.

TODO

  • Enable text interpolation inside queries using text/template
  • sqlx integration

Main metrics

Overview
Name With Ownerqustavo/dotsql
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:GNU General Public License v2.0
所有者活动
Created At2014-11-20 12:14:39
Pushed At2023-11-24 08:19:45
Last Commit At2023-11-23 14:15:59
Release Count4
Last Release Namev1.2.0 (Posted on )
First Release Namev0.1.0 (Posted on )
用户参与
Stargazers Count746
Watchers Count25
Fork Count53
Commits Count63
Has Issues Enabled
Issues Count13
Issue Open Count6
Pull Requests Count10
Pull Requests Open Count2
Pull Requests Close Count3
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private