diff --git a/frontend/src/views/ops/db/dialect/dm_dialect.ts b/frontend/src/views/ops/db/dialect/dm_dialect.ts index 8837c32c..9d025c3d 100644 --- a/frontend/src/views/ops/db/dialect/dm_dialect.ts +++ b/frontend/src/views/ops/db/dialect/dm_dialect.ts @@ -56,18 +56,18 @@ const DM_TYPE_LIST: sqlColumnType[] = [ { udtName: 'BFILE', dataType: 'BFILE', desc: '二进制文件', space: '', range: '100G-1' }, // 达梦系统特有的字段类型 从 ALL_TYPES 表中查询得到 - {udtName: 'SYSGEO.ST_GEOMETRY', dataType: 'SYSGEO.ST_GEOMETRY', desc: '通用几何对象类型,可以表示点、线、面等任何几何形状', space: '', range: ''}, - {udtName: 'SYSGEO.ST_LINESTRING', dataType: 'SYSGEO.ST_LINESTRING', desc: '表示一条或多条连续的线段', space: '', range: ''}, {udtName: 'SYSGEO.ST_CURVE', dataType: 'SYSGEO.ST_CURVE', desc: '表示一条曲线,可以是圆弧、抛物线等', space: '', range: ''}, + {udtName: 'SYSGEO.ST_LINESTRING', dataType: 'SYSGEO.ST_LINESTRING', desc: '表示一条或多条连续的线段', space: '', range: ''}, {udtName: 'SYSGEO.ST_GEOMCOLLECTION', dataType: 'SYSGEO.ST_GEOMCOLLECTION', desc: '表示一个几何对象集合,可以包含多个不同类型的几何对象', space: '', range: ''}, + {udtName: 'SYSGEO.ST_GEOMETRY', dataType: 'SYSGEO.ST_GEOMETRY', desc: '通用几何对象类型,可以表示点、线、面等任何几何形状', space: '', range: ''}, {udtName: 'SYSGEO.ST_MULTICURVE', dataType: 'SYSGEO.ST_MULTICURVE', desc: '表示多个曲线的集合', space: '', range: ''}, + {udtName: 'SYSGEO.ST_MULTILINESTRING', dataType: 'SYSGEO.ST_MULTILINESTRING', desc: '表示多个线串的集合', space: '', range: ''}, {udtName: 'SYSGEO.ST_MULTIPOINT', dataType: 'SYSGEO.ST_MULTIPOINT', desc: '表示多个点的集合', space: '', range: ''}, + {udtName: 'SYSGEO.ST_MULTIPOLYGON', dataType: 'SYSGEO.ST_MULTIPOLYGON', desc: '表示多个多边形的集合', space: '', range: ''}, {udtName: 'SYSGEO.ST_MULTISURFACE', dataType: 'SYSGEO.ST_MULTISURFACE', desc: '表示多个表面的集合', space: '', range: ''}, {udtName: 'SYSGEO.ST_POINT', dataType: 'SYSGEO.ST_POINT', desc: '表示一个点', space: '', range: ''}, - {udtName: 'SYSGEO.ST_SURFACE', dataType: 'SYSGEO.ST_SURFACE', desc: '表示一个表面,通常是一个多边形', space: '', range: ''}, - {udtName: 'SYSGEO.ST_MULTILINESTRING', dataType: 'SYSGEO.ST_MULTILINESTRING', desc: '表示多个线串的集合', space: '', range: ''}, - {udtName: 'SYSGEO.ST_MULTIPOLYGON', dataType: 'SYSGEO.ST_MULTIPOLYGON', desc: '表示多个多边形的集合', space: '', range: ''}, {udtName: 'SYSGEO.ST_POLYGON', dataType: 'SYSGEO.ST_POLYGON', desc: '表示一个多边形', space: '', range: ''}, + {udtName: 'SYSGEO.ST_SURFACE', dataType: 'SYSGEO.ST_SURFACE', desc: '表示一个表面,通常是一个多边形', space: '', range: ''}, ]; diff --git a/server/internal/db/dbm/dm/helper.go b/server/internal/db/dbm/dm/helper.go index c19709e1..fc2dc6df 100644 --- a/server/internal/db/dbm/dm/helper.go +++ b/server/internal/db/dbm/dm/helper.go @@ -77,6 +77,22 @@ var ( dbi.CommonTypeEnum: "TEXT", dbi.CommonTypeJSON: "TEXT", } + + dmStructTypes = map[string]bool{ + "ST_CURVE": true, // 表示一条曲线,可以是圆弧、抛物线等 + "ST_LINESTRING": true, // 表示一条或多条连续的线段 + "ST_GEOMCOLLECTION": true, // 表示一个几何对象集合,可以包含多个不同类型的几何对象 + "ST_GEOMETRY": true, // 通用几何对象类型,可以表示点、线、面等任何几何形状 + "ST_MULTICURVE": true, // 表示多个曲线的集合 + "ST_MULTILINESTRING": true, // 表示多个线串的集合 + "ST_MULTIPOINT": true, // 表示多个点的集合 + "ST_MULTIPOLYGON": true, // 表示多个多边形的集合 + "ST_MULTISURFACE": true, // 表示多个表面的集合 + "ST_POINT": true, // 表示一个点 + "ST_POLYGON": true, // 表示一个多边形 + "ST_SURFACE": true, // 表示一个表面,通常是一个多边形 + } + dataHelper = &DataHelper{} columnHelper = &ColumnHelper{} ) @@ -217,7 +233,7 @@ func (ch *ColumnHelper) FixColumn(column *dbi.Column) { } func (dd *ColumnHelper) GetScanDestPtr(qc *dbi.QueryColumn) any { - if qc.Type == "st_point" { + if dmStructTypes[strings.ToUpper(qc.Type)] { return &dm.DmStruct{} } return dd.DefaultColumnHelper.GetScanDestPtr(qc) diff --git a/server/internal/db/dbm/sqlparser/pgsql/visitor.go b/server/internal/db/dbm/sqlparser/pgsql/visitor.go index 5eb5a5e1..a9ea064e 100644 --- a/server/internal/db/dbm/sqlparser/pgsql/visitor.go +++ b/server/internal/db/dbm/sqlparser/pgsql/visitor.go @@ -174,7 +174,7 @@ func (v *PgsqlVisitor) VisitSimple_select_pramary(ctx *pgparser.Simple_select_pr qs.SelectElements = c.Accept(v).(*sqlstmt.SelectElements) } - if c := ctx.Where_clause(); c != nil { + if c := ctx.Where_clause(); c != nil && c.A_expr() != nil { qs.Where = c.A_expr().Accept(v).(sqlstmt.IExpr) }