jet/generator/metadata/dialect_query_set.go

52 lines
1.5 KiB
Go
Raw Permalink Normal View History

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
const (
2021-10-21 13:21:01 +02:00
BaseTable TableType = "BASE TABLE"
ViewTable TableType = "VIEW"
)
2023-07-21 13:20:44 +02:00
// DialectQuerySet is set of methods necessary to retrieve dialect metadata information
type DialectQuerySet interface {
2023-07-21 13:20:44 +02:00
GetTablesMetaData(db *sql.DB, schemaName string, tableType TableType) ([]Table, error)
GetEnumsMetaData(db *sql.DB, schemaName string) ([]Enum, error)
}
// GetSchema retrieves Schema information from database
2023-07-21 13:20:44 +02:00
func GetSchema(db *sql.DB, querySet DialectQuerySet, schemaName string) (Schema, error) {
tablesMetaData, err := querySet.GetTablesMetaData(db, schemaName, BaseTable)
if err != nil {
return Schema{}, fmt.Errorf("failed to get %s tables metadata: %w", schemaName, err)
}
viewMetaData, err := querySet.GetTablesMetaData(db, schemaName, ViewTable)
if err != nil {
return Schema{}, fmt.Errorf("failed to get %s view metadata: %w", schemaName, err)
}
enumsMetaData, err := querySet.GetEnumsMetaData(db, schemaName)
if err != nil {
return Schema{}, fmt.Errorf("failed to get %s enum metadata: %w", schemaName, err)
}
ret := Schema{
Name: schemaName,
2023-07-21 13:20:44 +02:00
TablesMetaData: tablesMetaData,
ViewsMetaData: viewMetaData,
EnumsMetaData: enumsMetaData,
}
fmt.Println(" FOUND", len(ret.TablesMetaData), "table(s),", len(ret.ViewsMetaData), "view(s),",
len(ret.EnumsMetaData), "enum(s)")
2023-07-21 13:20:44 +02:00
return ret, nil
}