89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// AutoCodeSqlite SQLite适配器
|
|
type AutoCodeSqlite struct {
|
|
db *gorm.DB
|
|
dbList map[string]*gorm.DB
|
|
}
|
|
|
|
// NewAutoCodeSqlite 创建SQLite适配器
|
|
func NewAutoCodeSqlite(db *gorm.DB, dbList map[string]*gorm.DB) *AutoCodeSqlite {
|
|
return &AutoCodeSqlite{
|
|
db: db,
|
|
dbList: dbList,
|
|
}
|
|
}
|
|
|
|
// GetDB 获取数据库的所有数据库名
|
|
func (s *AutoCodeSqlite) GetDB(ctx context.Context) ([]Db, error) {
|
|
var entities []Db
|
|
sql := "PRAGMA database_list;"
|
|
var databaseList []struct {
|
|
File string `gorm:"column:file"`
|
|
}
|
|
err := s.db.WithContext(ctx).Raw(sql).Find(&databaseList).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, database := range databaseList {
|
|
if database.File != "" {
|
|
fileName := filepath.Base(database.File)
|
|
fileExt := filepath.Ext(fileName)
|
|
fileNameWithoutExt := strings.TrimSuffix(fileName, fileExt)
|
|
entities = append(entities, Db{Database: fileNameWithoutExt})
|
|
}
|
|
}
|
|
return entities, nil
|
|
}
|
|
|
|
// GetTables 获取数据库的所有表名
|
|
func (s *AutoCodeSqlite) GetTables(ctx context.Context, dbName string) ([]Table, error) {
|
|
var entities []Table
|
|
sql := `SELECT name FROM sqlite_master WHERE type='table'`
|
|
var tableNames []string
|
|
err := s.db.WithContext(ctx).Raw(sql).Find(&tableNames).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, tableName := range tableNames {
|
|
entities = append(entities, Table{TableName: tableName})
|
|
}
|
|
return entities, nil
|
|
}
|
|
|
|
// GetColumn 获取指定数据表的所有字段名,类型值等
|
|
func (s *AutoCodeSqlite) GetColumn(ctx context.Context, tableName, dbName string) ([]Column, error) {
|
|
var entities []Column
|
|
sql := fmt.Sprintf("PRAGMA table_info(%s);", tableName)
|
|
var columnInfos []struct {
|
|
Name string `gorm:"column:name"`
|
|
Type string `gorm:"column:type"`
|
|
Pk int `gorm:"column:pk"`
|
|
}
|
|
err := s.db.WithContext(ctx).Raw(sql).Scan(&columnInfos).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, columnInfo := range columnInfos {
|
|
pk := 0
|
|
if columnInfo.Pk == 1 {
|
|
pk = 1
|
|
}
|
|
entities = append(entities, Column{
|
|
ColumnName: columnInfo.Name,
|
|
DataType: columnInfo.Type,
|
|
PrimaryKey: pk,
|
|
})
|
|
}
|
|
return entities, nil
|
|
}
|