mirror of
https://github.com/ManyakRus/crud_generator.git
synced 2024-12-23 12:44:13 +02:00
96 lines
2.0 KiB
Go
96 lines
2.0 KiB
Go
package schema
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
const mysqlAllColumns = `SELECT * FROM %s LIMIT 0`
|
|
|
|
const mysqlTableNamesWithSchema = `
|
|
SELECT
|
|
table_schema,
|
|
table_name
|
|
FROM
|
|
information_schema.tables
|
|
WHERE
|
|
table_type = 'BASE TABLE'
|
|
ORDER BY
|
|
table_schema,
|
|
table_name
|
|
`
|
|
|
|
const mysqlViewNamesWithSchema = `
|
|
SELECT
|
|
table_schema,
|
|
table_name
|
|
FROM
|
|
information_schema.tables
|
|
WHERE
|
|
table_type = 'VIEW'
|
|
ORDER BY
|
|
table_schema,
|
|
table_name
|
|
`
|
|
|
|
const mysqlPrimaryKey = `
|
|
SELECT
|
|
sta.column_name
|
|
FROM
|
|
information_schema.tables tab
|
|
INNER JOIN
|
|
information_schema.statistics sta
|
|
ON sta.table_schema = tab.table_schema AND
|
|
sta.table_name = tab.table_name AND
|
|
sta.index_name = 'primary'
|
|
WHERE
|
|
tab.table_type = 'BASE TABLE' AND
|
|
tab.table_schema = database() AND
|
|
tab.table_name = ?
|
|
ORDER BY
|
|
sta.seq_in_index
|
|
`
|
|
|
|
const mysqlPrimaryKeyWithSchema = `
|
|
SELECT
|
|
sta.column_name
|
|
FROM
|
|
information_schema.tables tab
|
|
INNER JOIN
|
|
information_schema.statistics sta
|
|
ON sta.table_schema = tab.table_schema AND
|
|
sta.table_name = tab.table_name AND
|
|
sta.index_name = 'primary'
|
|
WHERE
|
|
tab.table_type = 'BASE TABLE' AND
|
|
tab.table_schema = ? AND
|
|
tab.table_name = ?
|
|
ORDER BY
|
|
sta.seq_in_index
|
|
`
|
|
|
|
type mysqlDialect struct{}
|
|
|
|
func (mysqlDialect) escapeIdent(ident string) string {
|
|
// `tablename`
|
|
return escapeWithBackticks(ident)
|
|
}
|
|
|
|
func (d mysqlDialect) ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
|
|
return fetchColumnTypes(db, mysqlAllColumns, schema, name, d.escapeIdent)
|
|
}
|
|
|
|
func (mysqlDialect) PrimaryKey(db *sql.DB, schema, name string) ([]string, error) {
|
|
if schema == "" {
|
|
return fetchNames(db, mysqlPrimaryKey, "", name)
|
|
}
|
|
return fetchNames(db, mysqlPrimaryKeyWithSchema, schema, name)
|
|
}
|
|
|
|
func (mysqlDialect) TableNames(db *sql.DB) ([][2]string, error) {
|
|
return fetchObjectNames(db, mysqlTableNamesWithSchema)
|
|
}
|
|
|
|
func (mysqlDialect) ViewNames(db *sql.DB) ([][2]string, error) {
|
|
return fetchObjectNames(db, mysqlViewNamesWithSchema)
|
|
}
|