package test import ( "fmt" "log" "testing" "git.x2erp.com/qdy/go-base/types" "git.x2erp.com/qdy/go-db/factory/http" ) // 函数名改为 TestAgentToDorisDirect 以符合 Go 测试约定 func TestAgentToDorisDirect(t *testing.T) { err := agentToDorisDirect(t) if err != nil { t.Errorf("测试失败: %v", err) } } func agentToDorisDirect(t *testing.T) error { startRow := 0 endRow := 5000 // 生成查询SQL(使用参数模式) querySQL, queryParams := getSQLWithPagination(startRow, endRow) // 准备查询请求 queryRequest := types.QueryRequest{ SQL: querySQL, PositionalParams: queryParams, WriterHeader: false, AgentUrl: "http://localhost:8080/api/query/csv/param", AgentToken: "123", DorisDatabase: "X6_STOCK_DEV", DorisTable: "A3_CLOTHING", } // 1. 获取HTTP工厂实例 httpFactory, err := http.GetHTTPFactory() if err != nil { log.Printf("Failed to get HTTP factory: %v", err) return fmt.Errorf("Failed to get HTTP factory: %v", err) } fmt.Println("HTTP factory created successfully") log.Printf("queryRequest:\n%s", "queryRequest") // 发送POST请求到 /api/query/csv 获取CSV格式数据 httpClient := httpFactory.CreateClient() resp, err := httpClient.PostWithAuth( "http://localhost:9090/api/data/agent/to/doris", queryRequest, "123", // Bearer Token nil, ) if err != nil { errMsg := fmt.Sprintf("请求失败: %v", err) t.Error(errMsg) return nil } log.Printf("查询结果:\n%s", resp) //t.Logf("查询成功,响应数据长度: %d", resp) return nil } // getSQLWithPagination 生成带分页的SQL语句(参数模式) // 返回SQL语句和参数映射 func getSQLWithPagination(startRow, endRow int) (string, []interface{}) { sql := `SELECT CLOTHING_ID, CLOTHING_YEAR, CLOTHING_NAME, STYLECOLOR_ID, STYLE_ID, COLOR_ID, SIZE_ID, CREATE_DATE, STYLE_GROUP, J_PRICE, X_PRICE, V_PRICE, CLERK_ROYALTYRATE, CLERK_ROYALTYPRICE, BRAND_CODE, STYLEVER_ID, J_COST, CLOTHING_IMG, STYLE_UNIT_CODE, STYLE_SEX_CODE, STYLE_KIND_CODE, STYLE_CLASS_CODE, STYLE_SUBCLASS_CODE, STYLE_DESIGNER_CODE, STYLE_PLATER_CODE, STYLE_STYLES_CODE, STYLE_LOCATE_CODE, STYLE_SALETYPE_CODE, STYLE_COLORSYSTEM_CODE, STYLE_THEME_CODE, STYLE_INDENTTYPE_CODE, STYLE_PRICEBAND_CODE, STYLE_MONTH_CODE, STYLE_COMPOSITION_CODE, STYLE_SUPPLIER_CODE, STYLE_SPARE1_CODE, STYLE_SPARE2_CODE, STYLE_SPARE4_CODE, STYLE_SPARE5_CODE, CATEGORY_CODE, BRAND_ID, STYCOLVER_ID, STYLE_SAME, CLOTHING_BARCODE, CLOTHING_HELPID, CLOTHING_GBCODE, CLOTHING_RFID, STYLE_SUBJECT_ID, SIZEGRP_ID, STYLE_HELPID, CLOTHING_GBCODE1, COLOR_NAME, STYLEVER_NAME, SIZE_NAME, STYLE_UNIT, STYLE_SEX, STYLE_KIND, STYLE_CLASS, STYLE_SUBCLASS, STYLE_DESIGNER, STYLE_PLATER, STYLE_BAND, STYLE_STYLES, STYLE_LOCATE, STYLE_SALETYPE, STYLE_COLORSYSTEM, STYLE_THEME, STYLE_INDENTTYPE, STYLE_PRICEBAND, STYLE_MONTH, STYLE_COMPOSITION, STYLE_SUPPLIER, STYLE_SPARE1, STYLE_SPARE2, STYLE_SPARE3, STYLE_SPARE4, STYLE_SPARE5, CATEGORY_NAME, BRAND_NAME, STYLE_YEAR_NAME, STYLE_SEARCH_KEY, STYLE_SUBJECT_NAME, CLOTHING_REMARK, STYLE_SPARE3_CODE, COST, BRAND_GROUPCODE, CLASS_GROUPCODE, MONTH_GROUPCODE, RETURNSUBJECT_ID, PRODUCT_SORT, CLOTHING_PARTITION FROM ( SELECT a.*, ROWNUM as rn FROM ( SELECT * FROM X6_STOCK_DEV.A3_CLOTHING ORDER BY CLOTHING_ID ) a WHERE ROWNUM <= :1 ) WHERE rn > :2` // 创建参数映射 params := []interface{}{ endRow, startRow, // WHERE rn > :start_row 所以是startRow-1 } return sql, params }