waku-org/go-waku

View on GitHub
waku/persistence/sql_queries.go

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package persistence

import (
    "fmt"
)

// Queries are the SQL queries for a given table.
type Queries struct {
    deleteQuery  string
    existsQuery  string
    getQuery     string
    putQuery     string
    queryQuery   string
    prefixQuery  string
    limitQuery   string
    offsetQuery  string
    getSizeQuery string
}

// CreateQueries Function creates a set of queries for an SQL table.
// Note: Do not use this function to create queries for a table, rather use <rdb>.NewQueries to create table as well as queries.
func CreateQueries(tbl string) *Queries {
    return &Queries{
        deleteQuery:  fmt.Sprintf("DELETE FROM %s WHERE key = $1", tbl),
        existsQuery:  fmt.Sprintf("SELECT exists(SELECT 1 FROM %s WHERE key=$1)", tbl),
        getQuery:     fmt.Sprintf("SELECT data FROM %s WHERE key = $1", tbl),
        putQuery:     fmt.Sprintf("INSERT INTO %s (key, data) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET data = $2", tbl),
        queryQuery:   fmt.Sprintf("SELECT key, data FROM %s", tbl),
        prefixQuery:  ` WHERE key LIKE '%s%%' ORDER BY key`,
        limitQuery:   ` LIMIT %d`,
        offsetQuery:  ` OFFSET %d`,
        getSizeQuery: fmt.Sprintf("SELECT length(data) FROM %s WHERE key = $1", tbl),
    }
}

// Delete returns the query for deleting a row.
func (q Queries) Delete() string {
    return q.deleteQuery
}

// Exists returns the query for determining if a row exists.
func (q Queries) Exists() string {
    return q.existsQuery
}

// Get returns the query for getting a row.
func (q Queries) Get() string {
    return q.getQuery
}

// Put returns the query for putting a row.
func (q Queries) Put() string {
    return q.putQuery
}

// Query returns the query for getting multiple rows.
func (q Queries) Query() string {
    return q.queryQuery
}

// Prefix returns the query fragment for getting a rows with a key prefix.
func (q Queries) Prefix() string {
    return q.prefixQuery
}

// Limit returns the query fragment for limiting results.
func (q Queries) Limit() string {
    return q.limitQuery
}

// Offset returns the query fragment for returning rows from a given offset.
func (q Queries) Offset() string {
    return q.offsetQuery
}

// GetSize returns the query for determining the size of a value.
func (q Queries) GetSize() string {
    return q.getSizeQuery
}