Skip to content
This repository has been archived by the owner on Jul 29, 2020. It is now read-only.

Statements encapsulate #35

Merged
merged 7 commits into from
Feb 27, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,13 @@ type Adapter interface {
InsertSQL(database string, schema string, table string, names string, placeholders string) string
DeleteSQL(database string, schema string, table string) string
UpdateSQL(database string, schema string, table string, setSyntax string) string
DatabaseWhere(requestWhere string) (whereSyntax string)
DatabaseOrderBy(order string, hasCount bool) (orderBy string)
SchemaOrderBy(order string, hasCount bool) (orderBy string)
TableClause() (query string)
TableWhere(requestWhere string) (whereSyntax string)
TableOrderBy(order string) (orderBy string)
SchemaTablesClause() (query string)
SchemaTablesWhere(requestWhere string) (whereSyntax string)
SchemaTablesOrderBy(order string) (orderBy string)
}
81 changes: 80 additions & 1 deletion postgres/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ import (
"github.com/prest/adapters/internal/scanner"
"github.com/prest/adapters/postgres/formatters"
"github.com/prest/adapters/postgres/internal/connection"
"github.com/prest/adapters/postgres/statements"
"github.com/prest/config"
"github.com/prest/statements"
)

//Postgres adapter postgresql
Expand Down Expand Up @@ -922,3 +922,82 @@ func (adapter *Postgres) DeleteSQL(database string, schema string, table string)
func (adapter *Postgres) UpdateSQL(database string, schema string, table string, setSyntax string) string {
return fmt.Sprintf(statements.UpdateQuery, database, schema, table, setSyntax)
}

// DatabaseWhere generate database where syntax
func (adapter *Postgres) DatabaseWhere(requestWhere string) (whereSyntax string) {
whereSyntax = statements.DatabasesWhere
if requestWhere != "" {
whereSyntax = fmt.Sprint(whereSyntax, " AND ", requestWhere)
}
return
}

// DatabaseOrderBy generate database order by
func (adapter *Postgres) DatabaseOrderBy(order string, hasCount bool) (orderBy string) {
if order != "" {
orderBy = order
} else if !hasCount {
orderBy = fmt.Sprintf(statements.DatabasesOrderBy, statements.FieldDatabaseName)
}
return
}

// SchemaOrderBy generate schema order by
func (adapter *Postgres) SchemaOrderBy(order string, hasCount bool) (orderBy string) {
if order != "" {
orderBy = order
} else if !hasCount {
orderBy = fmt.Sprintf(statements.SchemasOrderBy, statements.FieldSchemaName)
}
return
}

// TableClause generate table clause
func (adapter *Postgres) TableClause() (query string) {
query = statements.TablesSelect
return
}

// TableWhere generate table where syntax
func (adapter *Postgres) TableWhere(requestWhere string) (whereSyntax string) {
whereSyntax = statements.TablesWhere
if requestWhere != "" {
whereSyntax = fmt.Sprint(whereSyntax, " AND ", requestWhere)
}
return
}

// TableOrderBy generate table order by
func (adapter *Postgres) TableOrderBy(order string) (orderBy string) {
if order != "" {
orderBy = order
} else {
orderBy = statements.TablesOrderBy
}
return
}

// SchemaTablesClause generate schema tables clause
func (adapter *Postgres) SchemaTablesClause() (query string) {
query = statements.SchemaTablesSelect
return
}

// SchemaTablesWhere generate schema tables where syntax
func (adapter *Postgres) SchemaTablesWhere(requestWhere string) (whereSyntax string) {
whereSyntax = statements.SchemaTablesWhere
if requestWhere != "" {
whereSyntax = fmt.Sprint(whereSyntax, " AND ", requestWhere)
}
return
}

// SchemaTablesOrderBy generate schema tables order by
func (adapter *Postgres) SchemaTablesOrderBy(order string) (orderBy string) {
if order != "" {
orderBy = order
} else {
orderBy = statements.SchemaTablesOrderBy
}
return
}
137 changes: 137 additions & 0 deletions postgres/statements/queries.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
package statements

import "fmt"

const (
FieldDatabaseName = "datname"
FieldSchemaName = "schema_name"
FieldCountDatabaseName = "COUNT(datname)"
FieldCountSchemaName = "COUNT(schema_name)"

// Databases list all data bases

// DatabasesSelect clause
DatabasesSelect = `
SELECT
%s
FROM
pg_database`

// DatabasesWhere clause
DatabasesWhere = `
WHERE
NOT datistemplate`
// DatabasesOrderBy clause
DatabasesOrderBy = `
ORDER BY
%s ASC`
// Schemas list all schema on data base

// SchemasSelect clause
SchemasSelect = `
SELECT
%s
FROM
information_schema.schemata`

SchemasGroupBy = `
GROUP BY
%s`

// SchemasOrderBy clause
SchemasOrderBy = `
ORDER BY
%s ASC`

// Tables list all tables

// TablesSelect clause
TablesSelect = `
SELECT
n.nspname as "schema",
c.relname as "name",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized_view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
WHEN 'f' THEN 'foreign_table'
END as "type",
pg_catalog.pg_get_userbyid(c.relowner) as "owner"
FROM
pg_catalog.pg_class c
LEFT JOIN
pg_catalog.pg_namespace n ON n.oid = c.relnamespace `
// TablesWhere clause
TablesWhere = `
WHERE
c.relkind IN ('r','v','m','S','s','') AND
n.nspname !~ '^pg_toast' AND
n.nspname NOT IN ('information_schema', 'pg_catalog') AND
has_schema_privilege(n.nspname, 'USAGE') `
// TablesOrderBy clause
TablesOrderBy = `
ORDER BY 1, 2`
// Tables default query
Tables = TablesSelect + TablesWhere + TablesOrderBy
// list all tables in schema and database

// SchemaTablesSelect clause
SchemaTablesSelect = `
SELECT
t.tablename as "name",
t.schemaname as "schema",
sc.catalog_name as "database"
FROM
pg_catalog.pg_tables t
INNER JOIN
information_schema.schemata sc ON sc.schema_name = t.schemaname`

// SchemaTablesWhere clause
SchemaTablesWhere = `
WHERE
sc.catalog_name = $1 AND
t.schemaname = $2`

// SchemaTablesOrderBy clause
SchemaTablesOrderBy = `
ORDER BY
t.tablename ASC`

// SchemaTables default query
SchemaTables = SchemaTablesSelect + SchemaTablesWhere + SchemaTablesOrderBy

// SelectInTable default query
SelectInTable = `
SELECT
*
FROM`

// InsertQuery query
InsertQuery = `
INSERT INTO "%s"."%s"."%s"(%s) VALUES(%s)`

// DeleteQuery query
DeleteQuery = `
DELETE FROM "%s"."%s"."%s"`

// UpdateQuery query
UpdateQuery = `
UPDATE "%s"."%s"."%s" SET %s`

// GroupBy query
GroupBy = `GROUP BY %s`

// Having query
Having = `HAVING %s %s %s`
)

var (
// Databases default query
Databases = fmt.Sprintf(DatabasesSelect, FieldDatabaseName) + DatabasesWhere + fmt.Sprintf(DatabasesOrderBy, FieldDatabaseName)

// Schemas default query
Schemas = fmt.Sprintf(SchemasSelect, FieldSchemaName) + fmt.Sprintf(SchemasOrderBy, FieldSchemaName)
)