76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// AutoCodeOracle Oracle适配器
|
|
type AutoCodeOracle struct {
|
|
db *gorm.DB
|
|
dbList map[string]*gorm.DB
|
|
}
|
|
|
|
// NewAutoCodeOracle 创建Oracle适配器
|
|
func NewAutoCodeOracle(db *gorm.DB, dbList map[string]*gorm.DB) *AutoCodeOracle {
|
|
return &AutoCodeOracle{
|
|
db: db,
|
|
dbList: dbList,
|
|
}
|
|
}
|
|
|
|
// GetDB 获取数据库的所有数据库名
|
|
func (s *AutoCodeOracle) GetDB(ctx context.Context) ([]Db, error) {
|
|
var entities []Db
|
|
sql := `SELECT lower(username) AS "database" FROM all_users`
|
|
err := s.db.WithContext(ctx).Raw(sql).Scan(&entities).Error
|
|
return entities, err
|
|
}
|
|
|
|
// GetTables 获取数据库的所有表名
|
|
func (s *AutoCodeOracle) GetTables(ctx context.Context, dbName string) ([]Table, error) {
|
|
var entities []Table
|
|
sql := `select lower(table_name) as "table_name" from all_tables where lower(owner) = ?`
|
|
err := s.db.WithContext(ctx).Raw(sql, dbName).Scan(&entities).Error
|
|
return entities, err
|
|
}
|
|
|
|
// GetColumn 获取指定数据库和指定数据表的所有字段名,类型值等
|
|
func (s *AutoCodeOracle) GetColumn(ctx context.Context, tableName, dbName string) ([]Column, error) {
|
|
var entities []Column
|
|
sql := `
|
|
SELECT
|
|
lower(a.COLUMN_NAME) as "column_name",
|
|
(CASE WHEN a.DATA_TYPE = 'NUMBER' AND a.DATA_SCALE=0 THEN 'int' else lower(a.DATA_TYPE) end) as "data_type",
|
|
(CASE WHEN a.DATA_TYPE = 'NUMBER' THEN a.DATA_PRECISION else a.DATA_LENGTH end) as "data_type_long",
|
|
b.COMMENTS as "column_comment",
|
|
(CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 1 ELSE 0 END) as "primary_key",
|
|
a.COLUMN_ID
|
|
FROM
|
|
all_tab_columns a
|
|
JOIN
|
|
all_col_comments b ON a.OWNER = b.OWNER AND a.TABLE_NAME = b.TABLE_NAME AND a.COLUMN_NAME = b.COLUMN_NAME
|
|
LEFT JOIN
|
|
(
|
|
SELECT
|
|
acc.OWNER,
|
|
acc.TABLE_NAME,
|
|
acc.COLUMN_NAME
|
|
FROM
|
|
all_cons_columns acc
|
|
JOIN
|
|
all_constraints ac ON acc.OWNER = ac.OWNER AND acc.CONSTRAINT_NAME = ac.CONSTRAINT_NAME
|
|
WHERE
|
|
ac.CONSTRAINT_TYPE = 'P'
|
|
) pk ON a.OWNER = pk.OWNER AND a.TABLE_NAME = pk.TABLE_NAME AND a.COLUMN_NAME = pk.COLUMN_NAME
|
|
WHERE
|
|
lower(a.table_name) = ?
|
|
AND lower(a.OWNER) = ?
|
|
ORDER BY
|
|
a.COLUMN_ID
|
|
`
|
|
err := s.db.WithContext(ctx).Raw(sql, tableName, dbName).Scan(&entities).Error
|
|
return entities, err
|
|
}
|