From d07cd74a8c658cbe34875677164966f2ab5e18c2 Mon Sep 17 00:00:00 2001 From: zongyangleo Date: Thu, 28 Nov 2024 10:44:49 +0000 Subject: [PATCH] =?UTF-8?q?!127=20fix:=20=E8=BE=BE=E6=A2=A6=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=20*=20fix:=20=E8=BE=BE=E6=A2=A6=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/ops/db/dialect/dm_dialect.ts | 10 +++++----- server/internal/db/dbm/dm/helper.go | 18 +++++++++++++++++- .../internal/db/dbm/sqlparser/pgsql/visitor.go | 2 +- 3 files changed, 23 insertions(+), 7 deletions(-) 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) }