2021-07-27 17:39:21 +02:00
|
|
|
package metadata
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql"
|
|
|
|
|
"fmt"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// TableType is type of database table(view or base)
|
|
|
|
|
type TableType string
|
|
|
|
|
|
2021-10-21 13:21:01 +02:00
|
|
|
// SQL table types
|
2021-07-27 17:39:21 +02:00
|
|
|
const (
|
2021-10-21 13:21:01 +02:00
|
|
|
BaseTable TableType = "BASE TABLE"
|
|
|
|
|
ViewTable TableType = "VIEW"
|
2021-07-27 17:39:21 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// DialectQuerySet is set of methods necessary to retrieve dialect meta data information
|
|
|
|
|
type DialectQuerySet interface {
|
|
|
|
|
GetTablesMetaData(db *sql.DB, schemaName string, tableType TableType) []Table
|
|
|
|
|
GetEnumsMetaData(db *sql.DB, schemaName string) []Enum
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetSchema retrieves Schema information from database
|
|
|
|
|
func GetSchema(db *sql.DB, querySet DialectQuerySet, schemaName string) Schema {
|
|
|
|
|
ret := Schema{
|
|
|
|
|
Name: schemaName,
|
2021-10-21 13:21:01 +02:00
|
|
|
TablesMetaData: querySet.GetTablesMetaData(db, schemaName, BaseTable),
|
|
|
|
|
ViewsMetaData: querySet.GetTablesMetaData(db, schemaName, ViewTable),
|
2021-07-27 17:39:21 +02:00
|
|
|
EnumsMetaData: querySet.GetEnumsMetaData(db, schemaName),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println(" FOUND", len(ret.TablesMetaData), "table(s),", len(ret.ViewsMetaData), "view(s),",
|
|
|
|
|
len(ret.EnumsMetaData), "enum(s)")
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
}
|