qdy 3 månader sedan
förälder
incheckning
538cdaefa0
4 ändrade filer med 50 tillägg och 49 borttagningar
  1. 3
    23
      factory/execute.go
  2. 35
    10
      factory/factory.go
  3. 12
    12
      factory/query.go
  4. 0
    4
      go.sum

+ 3
- 23
factory/execute.go Visa fil

6
 )
6
 )
7
 
7
 
8
 // ExecuteDDL 执行DDL语句(创建、删除、更新表等)
8
 // ExecuteDDL 执行DDL语句(创建、删除、更新表等)
9
-func (f *DBFactory) ExecuteDDL(db *sql.DB, ddlSQL string) error {
9
+func (f *DBFactory) executeDDL(db *sql.DB, ddlSQL string) error {
10
 	if db == nil {
10
 	if db == nil {
11
 		return fmt.Errorf("database connection is nil")
11
 		return fmt.Errorf("database connection is nil")
12
 	}
12
 	}
25
 }
25
 }
26
 
26
 
27
 // ExecuteDDLWithTx 在事务中执行DDL语句
27
 // ExecuteDDLWithTx 在事务中执行DDL语句
28
-func (f *DBFactory) ExecuteDDLWithTx(db *sql.DB, ddlSQL string) error {
28
+func (f *DBFactory) executeDDLWithTx(db *sql.DB, ddlSQL string) error {
29
 	if db == nil {
29
 	if db == nil {
30
 		return fmt.Errorf("database connection is nil")
30
 		return fmt.Errorf("database connection is nil")
31
 	}
31
 	}
57
 }
57
 }
58
 
58
 
59
 // ExecuteMultipleDDL 执行多个DDL语句
59
 // ExecuteMultipleDDL 执行多个DDL语句
60
-func (f *DBFactory) ExecuteMultipleDDL(db *sql.DB, ddlSQLs []string) error {
60
+func (f *DBFactory) executeMultipleDDL(db *sql.DB, ddlSQLs []string) error {
61
 	if db == nil {
61
 	if db == nil {
62
 		return fmt.Errorf("database connection is nil")
62
 		return fmt.Errorf("database connection is nil")
63
 	}
63
 	}
93
 
93
 
94
 	return nil
94
 	return nil
95
 }
95
 }
96
-
97
-// 快捷方法 - 对外暴露的DDL执行方法
98
-
99
-// QuickExecuteDDL 快捷执行DDL语句
100
-func QuickExecuteDDL(db *sql.DB, ddlSQL string) error {
101
-	factory := &DBFactory{}
102
-	return factory.ExecuteDDL(db, ddlSQL)
103
-}
104
-
105
-// QuickExecuteDDLWithTx 快捷在事务中执行DDL语句
106
-func QuickExecuteDDLWithTx(db *sql.DB, ddlSQL string) error {
107
-	factory := &DBFactory{}
108
-	return factory.ExecuteDDLWithTx(db, ddlSQL)
109
-}
110
-
111
-// QuickExecuteMultipleDDL 快捷执行多个DDL语句
112
-func QuickExecuteMultipleDDL(db *sql.DB, ddlSQLs []string) error {
113
-	factory := &DBFactory{}
114
-	return factory.ExecuteMultipleDDL(db, ddlSQLs)
115
-}

+ 35
- 10
factory/factory.go Visa fil

84
 // -------------- 对外暴露的初始化方法(核心入口)--------------
84
 // -------------- 对外暴露的初始化方法(核心入口)--------------
85
 // NewDBQuery 初始化查询实例(对外提供唯一初始化入口)
85
 // NewDBQuery 初始化查询实例(对外提供唯一初始化入口)
86
 // db: 已初始化的数据库连接(由调用方传入,解耦数据库配置)
86
 // db: 已初始化的数据库连接(由调用方传入,解耦数据库配置)
87
-func newDBQuery(db *sql.DB) *QueryExecutor {
87
+func newDBQuery(db *sql.DB) *queryExecutor {
88
 	return newQueryExecutor(db)
88
 	return newQueryExecutor(db)
89
 }
89
 }
90
 
90
 
91
 // QuickQueryToJSON 快捷查询,直接返回 JSON 字节流
91
 // QuickQueryToJSON 快捷查询,直接返回 JSON 字节流
92
 func QueryToJSON(db *sql.DB, sql string) *types.QueryResult {
92
 func QueryToJSON(db *sql.DB, sql string) *types.QueryResult {
93
-	return newDBQuery(db).QueryToJSON(sql)
93
+	return newDBQuery(db).queryToJSON(sql)
94
 }
94
 }
95
 
95
 
96
 // QuickQueryToCSV 快捷查询,直接返回 CSV 字符串(包含表头)
96
 // QuickQueryToCSV 快捷查询,直接返回 CSV 字符串(包含表头)
97
 func QueryToCSV(db *sql.DB, sql string) ([]byte, error) {
97
 func QueryToCSV(db *sql.DB, sql string) ([]byte, error) {
98
-	return newDBQuery(db).QueryToCSV(sql)
98
+	return newDBQuery(db).queryToCSV(sql)
99
 }
99
 }
100
 
100
 
101
 // QuickExecuteWithColumns 快捷查询,返回完整结果(含列信息)
101
 // QuickExecuteWithColumns 快捷查询,返回完整结果(含列信息)
102
 func QueryWithColumns(db *sql.DB, sql string) *types.QueryResult {
102
 func QueryWithColumns(db *sql.DB, sql string) *types.QueryResult {
103
-	return newDBQuery(db).ExecuteQueryWithColumns(sql)
103
+	return newDBQuery(db).queryWithColumns(sql)
104
 }
104
 }
105
 
105
 
106
 // QuickExecuteDataOnly 快捷查询,返回纯数据(性能优先)
106
 // QuickExecuteDataOnly 快捷查询,返回纯数据(性能优先)
107
 func QueryDataOnly(db *sql.DB, sql string) *types.QueryResult {
107
 func QueryDataOnly(db *sql.DB, sql string) *types.QueryResult {
108
-	return newDBQuery(db).ExecuteQueryDataOnly(sql)
108
+	return newDBQuery(db).queryDataOnly(sql)
109
 }
109
 }
110
 
110
 
111
 // QuickExecuteCSV 快捷查询,返回 CSV 格式结果(支持自定义是否包含表头)
111
 // QuickExecuteCSV 快捷查询,返回 CSV 格式结果(支持自定义是否包含表头)
112
 func QueryCSV(db *sql.DB, sql string, includeHeader bool) *types.QueryResult {
112
 func QueryCSV(db *sql.DB, sql string, includeHeader bool) *types.QueryResult {
113
-	return newDBQuery(db).ExecuteQueryCSV(sql, includeHeader)
113
+	return newDBQuery(db).queryCSV(sql, includeHeader)
114
 }
114
 }
115
 
115
 
116
 // QuickExecuteCSVStream 快捷流式输出 CSV(直接写入 io.Writer,适合大文件)
116
 // QuickExecuteCSVStream 快捷流式输出 CSV(直接写入 io.Writer,适合大文件)
117
 func QueryCSVStream(db *sql.DB, sql string, w io.Writer, includeHeader bool) (int, error) {
117
 func QueryCSVStream(db *sql.DB, sql string, w io.Writer, includeHeader bool) (int, error) {
118
-	return newDBQuery(db).ExecuteQueryCSVStream(sql, w, includeHeader)
118
+	return newDBQuery(db).queryCSVStream(sql, w, includeHeader)
119
 }
119
 }
120
 
120
 
121
 // QuickExecuteDDL 快捷执行DDL语句
121
 // QuickExecuteDDL 快捷执行DDL语句
122
 func ExecuteDDL(db *sql.DB, ddlSQL string) error {
122
 func ExecuteDDL(db *sql.DB, ddlSQL string) error {
123
 	factory := &DBFactory{}
123
 	factory := &DBFactory{}
124
-	return factory.ExecuteDDL(db, ddlSQL)
124
+	return factory.executeDDL(db, ddlSQL)
125
 }
125
 }
126
 
126
 
127
 // QuickExecuteDDLWithTx 快捷在事务中执行DDL语句
127
 // QuickExecuteDDLWithTx 快捷在事务中执行DDL语句
128
 func ExecuteDDLWithTx(db *sql.DB, ddlSQL string) error {
128
 func ExecuteDDLWithTx(db *sql.DB, ddlSQL string) error {
129
 	factory := &DBFactory{}
129
 	factory := &DBFactory{}
130
-	return factory.ExecuteDDLWithTx(db, ddlSQL)
130
+	return factory.executeDDLWithTx(db, ddlSQL)
131
 }
131
 }
132
 
132
 
133
 // QuickExecuteMultipleDDL 快捷执行多个DDL语句
133
 // QuickExecuteMultipleDDL 快捷执行多个DDL语句
134
 func ExecuteMultipleDDL(db *sql.DB, ddlSQLs []string) error {
134
 func ExecuteMultipleDDL(db *sql.DB, ddlSQLs []string) error {
135
 	factory := &DBFactory{}
135
 	factory := &DBFactory{}
136
-	return factory.ExecuteMultipleDDL(db, ddlSQLs)
136
+	return factory.executeMultipleDDL(db, ddlSQLs)
137
+}
138
+
139
+// testConnection 测试数据库连接
140
+func TestConnection(db *sql.DB, dbType string) error {
141
+	var query string
142
+	switch dbType {
143
+	case "mysql", "postgres", "sqlserver":
144
+		query = "SELECT 1"
145
+	case "oracle":
146
+		query = "SELECT 1 FROM DUAL"
147
+	default:
148
+		query = "SELECT 1"
149
+	}
150
+
151
+	var result int
152
+	err := db.QueryRow(query).Scan(&result)
153
+	if err != nil {
154
+		return err
155
+	}
156
+
157
+	if result != 1 {
158
+		return fmt.Errorf("unexpected test result: %d", result)
159
+	}
160
+
161
+	return nil
137
 }
162
 }

+ 12
- 12
factory/query.go Visa fil

12
 	"git.x2erp.com/qdy/go-base/types"
12
 	"git.x2erp.com/qdy/go-base/types"
13
 )
13
 )
14
 
14
 
15
-func typesFunction() *types.QueryResult { // 确保使用了该包导出的类型,例如 QueryResult
16
-	return &types.QueryResult{}
17
-}
15
+// func typesFunction() *types.QueryResult { // 确保使用了该包导出的类型,例如 QueryResult
16
+// 	return &types.QueryResult{}
17
+// }
18
 
18
 
19
 // QueryExecutor 查询执行器
19
 // QueryExecutor 查询执行器
20
-type QueryExecutor struct {
20
+type queryExecutor struct {
21
 	db *sql.DB
21
 	db *sql.DB
22
 }
22
 }
23
 
23
 
24
 // NewQueryExecutor 创建查询执行器
24
 // NewQueryExecutor 创建查询执行器
25
-func newQueryExecutor(db *sql.DB) *QueryExecutor {
26
-	return &QueryExecutor{db: db}
25
+func newQueryExecutor(db *sql.DB) *queryExecutor {
26
+	return &queryExecutor{db: db}
27
 }
27
 }
28
 
28
 
29
 // QueryToJSON 执行查询并返回JSON格式数据(统一返回QueryResult)
29
 // QueryToJSON 执行查询并返回JSON格式数据(统一返回QueryResult)
30
-func (e *QueryExecutor) QueryToJSON(sql string) *types.QueryResult {
30
+func (e *queryExecutor) queryToJSON(sql string) *types.QueryResult {
31
 	startTime := time.Now()
31
 	startTime := time.Now()
32
 	result := &types.QueryResult{}
32
 	result := &types.QueryResult{}
33
 
33
 
108
 }
108
 }
109
 
109
 
110
 // QueryToCSV 查询并返回 CSV 字节数据(包含表头)
110
 // QueryToCSV 查询并返回 CSV 字节数据(包含表头)
111
-func (e *QueryExecutor) QueryToCSV(sql string) ([]byte, error) {
111
+func (e *queryExecutor) queryToCSV(sql string) ([]byte, error) {
112
 
112
 
113
 	if sql == "" {
113
 	if sql == "" {
114
 		return nil, fmt.Errorf("SQL query cannot be empty")
114
 		return nil, fmt.Errorf("SQL query cannot be empty")
174
 }
174
 }
175
 
175
 
176
 // ExecuteQueryWithColumns 执行查询并返回完整结果(包含列信息)
176
 // ExecuteQueryWithColumns 执行查询并返回完整结果(包含列信息)
177
-func (e *QueryExecutor) ExecuteQueryWithColumns(sql string) *types.QueryResult {
177
+func (e *queryExecutor) queryWithColumns(sql string) *types.QueryResult {
178
 	startTime := time.Now()
178
 	startTime := time.Now()
179
 	result := &types.QueryResult{}
179
 	result := &types.QueryResult{}
180
 
180
 
253
 }
253
 }
254
 
254
 
255
 // ExecuteQueryDataOnly 执行查询并返回纯数据(不包含列信息,性能更高)
255
 // ExecuteQueryDataOnly 执行查询并返回纯数据(不包含列信息,性能更高)
256
-func (e *QueryExecutor) ExecuteQueryDataOnly(sql string) *types.QueryResult {
256
+func (e *queryExecutor) queryDataOnly(sql string) *types.QueryResult {
257
 	startTime := time.Now()
257
 	startTime := time.Now()
258
 	result := &types.QueryResult{}
258
 	result := &types.QueryResult{}
259
 
259
 
334
 }
334
 }
335
 
335
 
336
 // ExecuteQueryCSV 执行查询并返回CSV格式数据
336
 // ExecuteQueryCSV 执行查询并返回CSV格式数据
337
-func (e *QueryExecutor) ExecuteQueryCSV(sql string, includeHeader bool) *types.QueryResult {
337
+func (e *queryExecutor) queryCSV(sql string, includeHeader bool) *types.QueryResult {
338
 	startTime := time.Now()
338
 	startTime := time.Now()
339
 	result := &types.QueryResult{}
339
 	result := &types.QueryResult{}
340
 
340
 
459
 }
459
 }
460
 
460
 
461
 // ExecuteQueryCSVStream 流式返回CSV数据
461
 // ExecuteQueryCSVStream 流式返回CSV数据
462
-func (e *QueryExecutor) ExecuteQueryCSVStream(sql string, w io.Writer, includeHeader bool) (int, error) {
462
+func (e *queryExecutor) queryCSVStream(sql string, w io.Writer, includeHeader bool) (int, error) {
463
 	rows, err := e.db.Query(sql)
463
 	rows, err := e.db.Query(sql)
464
 	if err != nil {
464
 	if err != nil {
465
 		return 0, err
465
 		return 0, err

+ 0
- 4
go.sum Visa fil

1
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
1
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
2
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
2
 filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
3
-git.x2erp.com/qdy/go-base v0.1.6 h1:25Fv2xvRmf3YZFmYiO1PmeR6molT0ucBRwKDE5DHr6Y=
4
-git.x2erp.com/qdy/go-base v0.1.6/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
5
-git.x2erp.com/qdy/go-base v0.1.7 h1:IdhNbvUyQZtPDTsccZArzE0C+OcGf0/XjEy2Xcu1WHI=
6
-git.x2erp.com/qdy/go-base v0.1.7/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
7
 git.x2erp.com/qdy/go-base v0.1.9 h1:SuyYSt3Gp7aXiUQRCBNwhrusJ53wlCnagiTYs5eITlY=
3
 git.x2erp.com/qdy/go-base v0.1.9 h1:SuyYSt3Gp7aXiUQRCBNwhrusJ53wlCnagiTYs5eITlY=
8
 git.x2erp.com/qdy/go-base v0.1.9/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
4
 git.x2erp.com/qdy/go-base v0.1.9/go.mod h1:Q+YLwpCoU8CVSnzATLdz2LAzVMlz/CEGzo8DePf7cug=
9
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=
5
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U=

Loading…
Avbryt
Spara