From a05e1a98f7b056e62e92eafa4c8e5a11ef46a2bc Mon Sep 17 00:00:00 2001 From: lj-wsdj Date: Mon, 5 Aug 2024 19:44:11 +0800 Subject: [PATCH] fix --- db/build.go | 7 ++++++- db/db.go | 10 ++++++++-- go.mod | 2 +- sql_builder.go | 12 +++++++++++- util/const.go | 5 +++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/db/build.go b/db/build.go index 8746141..c369c92 100644 --- a/db/build.go +++ b/db/build.go @@ -17,7 +17,12 @@ func (s *SqlBuilder[T]) buildPaginateSql(sqls string) string { s.Opts.Page.Init() pageIndex := s.Opts.Page.GetPageIndex() pageSize := s.Opts.Page.GetPageSize() - return fmt.Sprintf("%s limit %d offset %d", sqls, pageSize, (pageIndex-1)*pageSize) + if s.Driver == util.DriverMysql { + return fmt.Sprintf("%s limit %d offset %d", sqls, pageSize, (pageIndex-1)*pageSize) + } else if s.Driver == util.DriverOracle { + return fmt.Sprintf("select t.* from (%s) t where t.rownum > %d and t.rownum <= %d", sqls, (pageIndex-1)*pageSize, pageIndex*pageSize) + } + } func (s *SqlBuilder[T]) buildCountSql(sqls string) string { diff --git a/db/db.go b/db/db.go index a619f8f..1c495e6 100644 --- a/db/db.go +++ b/db/db.go @@ -3,16 +3,18 @@ package db import ( "git.botann.com/lijun/sql-builder/util" "git.botann.com/tinycs/boomerang/tydb" + "git.botann.com/tinycs/boomerang/tyoracle" "git.botann.com/tinycs/boomerang/tytaos" ) -type SqlConnector[T tydb.QOneRowRst | tytaos.QOneRowRst | int] interface { +type SqlConnector[T tydb.QOneRowRst | tytaos.QOneRowRst | tyoracle.QOneRowRst | int] interface { QueryEx(sql string, data interface{}, args ...interface{}) error QueryRow(sql string, data interface{}, args ...interface{}) (error, T) } -type SqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | int] struct { +type SqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | tyoracle.QOneRowRst | int] struct { Connector SqlConnector[T] + Driver string Sql string Opts Options } @@ -32,6 +34,10 @@ func (s *SqlBuilder[T]) Clear() { s.Opts = Options{} } +func (s *SqlBuilder[T]) SetDriver(driver string) { + s.Driver = driver +} + func (s *SqlBuilder[T]) FindBySql(data interface{}) error { sqls := s.buildSql() return s.Connector.QueryEx(sqls, data, s.Opts.args...) diff --git a/go.mod b/go.mod index 2a57b62..b3ff887 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module git.botann.com/lijun/sql-builder go 1.21.5 -require git.botann.com/tinycs/boomerang v1.4.6 +require git.botann.com/tinycs/boomerang v1.4.7 require ( github.com/go-sql-driver/mysql v1.5.0 // indirect diff --git a/sql_builder.go b/sql_builder.go index b22329e..bc0c148 100644 --- a/sql_builder.go +++ b/sql_builder.go @@ -2,14 +2,24 @@ package sql_builder import ( "git.botann.com/lijun/sql-builder/db" + "git.botann.com/lijun/sql-builder/util" "git.botann.com/tinycs/boomerang/tydb" + "git.botann.com/tinycs/boomerang/tyoracle" "git.botann.com/tinycs/boomerang/tytaos" ) func NewSqlBuilder[T tydb.QOneRowRst | tytaos.QOneRowRst | int](connector db.SqlConnector[T]) *db.SqlBuilder[T] { - return &db.SqlBuilder[T]{Connector: connector} + return &db.SqlBuilder[T]{Connector: connector, Driver: util.DriverMysql} } func DefaultSqlBuilder() *db.SqlBuilder[tydb.QOneRowRst] { return NewSqlBuilder[tydb.QOneRowRst](tydb.DB()) } + +func NewSqlBuilderByDriver[T tydb.QOneRowRst | tytaos.QOneRowRst | tyoracle.QOneRowRst | int](connector db.SqlConnector[T], driver string) *db.SqlBuilder[T] { + return &db.SqlBuilder[T]{Connector: connector, Driver: driver} +} + +func OracleSqlBuilder() *db.SqlBuilder[tyoracle.QOneRowRst] { + return NewSqlBuilderByDriver[tyoracle.QOneRowRst](tyoracle.DB(), util.DriverOracle) +} diff --git a/util/const.go b/util/const.go index ff62b2f..690d310 100644 --- a/util/const.go +++ b/util/const.go @@ -7,3 +7,8 @@ const ( OrderPlaceholder = "@o" PartitionPlaceholder = "@p" ) + +const ( + DriverMysql = "mysql" + DriverOracle = "oracle" +)