2026-05-01 05:45:45 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
//"database/sql"
|
|
|
|
|
"log"
|
|
|
|
|
"os"
|
|
|
|
|
|
2026-05-09 01:48:56 +00:00
|
|
|
"github.com/Gleipnir-Technology/jet/generator/metadata"
|
|
|
|
|
genpostgres "github.com/Gleipnir-Technology/jet/generator/postgres"
|
|
|
|
|
"github.com/Gleipnir-Technology/jet/generator/template"
|
|
|
|
|
"github.com/Gleipnir-Technology/jet/postgres"
|
2026-05-01 05:45:45 +00:00
|
|
|
_ "github.com/lib/pq"
|
2026-05-07 10:39:17 +00:00
|
|
|
"github.com/twpayne/go-geom"
|
2026-05-01 05:45:45 +00:00
|
|
|
)
|
|
|
|
|
|
2026-05-01 15:11:20 +00:00
|
|
|
var schemas []string = []string{
|
|
|
|
|
"arcgis",
|
2026-05-01 20:49:37 +00:00
|
|
|
"public",
|
|
|
|
|
"publicreport",
|
2026-05-01 15:11:20 +00:00
|
|
|
"stadia",
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-07 10:39:17 +00:00
|
|
|
func customTableSQLBuilderColumn(dialect template.Dialect, column metadata.Column) template.TableSQLBuilderColumn {
|
|
|
|
|
defaultColumn := template.DefaultTableSQLBuilderColumn(dialect, column)
|
|
|
|
|
/*
|
|
|
|
|
if defaultColumn.Name == "Location" {
|
|
|
|
|
log.Printf("current location column: name '%s' type '%s'", defaultColumn.Name, defaultColumn.Type)
|
|
|
|
|
defaultColumn.Import = "github.com/Gleipnir-Technology/nidus-sync/db/column"
|
|
|
|
|
defaultColumn.PackageName = "column"
|
|
|
|
|
defaultColumn.Type = "ColumnGeometry"
|
|
|
|
|
defaultColumn.TypeFactory = "GeometryColumn"
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
return defaultColumn
|
|
|
|
|
}
|
|
|
|
|
func customTableSQLBuilder(table metadata.Table) template.TableSQLBuilder {
|
|
|
|
|
builder := template.DefaultTableSQLBuilder(table).UseColumn(customTableSQLBuilderColumn)
|
|
|
|
|
log.Printf("table sql builder: path '%s' filename '%s' instancename '%s' typename '%s' defaultalias '%s'", builder.Path, builder.FileName, builder.InstanceName, builder.TypeName, builder.DefaultAlias)
|
|
|
|
|
builder.Imports = []string{"github.com/Gleipnir-Technology/nidus-sync/db/column"}
|
|
|
|
|
return builder
|
|
|
|
|
}
|
|
|
|
|
func customTableModelField(column metadata.Column) template.TableModelField {
|
|
|
|
|
defaultTableModelField := template.DefaultTableModelField(column)
|
|
|
|
|
//log.Printf("'%s' '%s' '%s'", table.Name, column.Name, column.DataType.Name)
|
|
|
|
|
if column.Name == "extent" && column.DataType.Name == "box2d" {
|
|
|
|
|
defaultTableModelField.Type = template.NewType(geom.Bounds{})
|
|
|
|
|
} else if column.DataType.Name == "geometry" {
|
|
|
|
|
name := "geom.T"
|
|
|
|
|
if column.IsNullable {
|
|
|
|
|
name = "*geom.T"
|
|
|
|
|
}
|
|
|
|
|
geom_type := template.Type{
|
|
|
|
|
ImportPath: "github.com/twpayne/go-geom",
|
|
|
|
|
AdditionalImportPaths: []string{},
|
|
|
|
|
Name: name,
|
|
|
|
|
}
|
|
|
|
|
defaultTableModelField.Type = geom_type
|
|
|
|
|
}
|
|
|
|
|
return defaultTableModelField
|
|
|
|
|
}
|
|
|
|
|
func customTableModel(table metadata.Table) template.TableModel {
|
|
|
|
|
return template.DefaultTableModel(table).UseField(customTableModelField)
|
|
|
|
|
}
|
2026-05-01 15:11:20 +00:00
|
|
|
func customTemplate() template.Template {
|
|
|
|
|
return template.Default(postgres.Dialect).UseSchema(func(schema metadata.Schema) template.Schema {
|
2026-05-07 10:39:17 +00:00
|
|
|
customSchema := template.DefaultSchema(schema)
|
|
|
|
|
customSchema = customSchema.UseModel(template.DefaultModel().UseTable(customTableModel))
|
|
|
|
|
customSchema = customSchema.UseSQLBuilder(template.DefaultSQLBuilder().UseTable(customTableSQLBuilder))
|
|
|
|
|
return customSchema
|
2026-05-01 15:11:20 +00:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
for _, schema := range schemas {
|
|
|
|
|
err := genpostgres.GenerateDSN(
|
|
|
|
|
"postgresql://?host=/var/run/postgresql&sslmode=disable&dbname=nidus-sync",
|
|
|
|
|
schema,
|
|
|
|
|
"../gen",
|
|
|
|
|
customTemplate(),
|
|
|
|
|
)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("Failed: %v", err)
|
|
|
|
|
os.Exit(1)
|
|
|
|
|
}
|
2026-05-01 05:45:45 +00:00
|
|
|
}
|
|
|
|
|
}
|