wecisecode vor 2 Wochen
Ursprung
Commit
f7b3a34b4a

Datei-Diff unterdrückt, da er zu groß ist
+ 3664 - 3664
odbctest/mql/basic/univdemo_peron_to_org/32insert_person.mql


odbctest/mql/build.bat → odbctest/mql/build_local_bin.bat


+ 0 - 0
odbctest/mql/build.sh


+ 1 - 0
odbctest/odbcmql/mql_prepare.go

@@ -41,6 +41,7 @@ func NewMQLGroupRequest() (mqg *MQLGroupRequest) {
 	return
 }
 
+// 加入请求组,并初始化,提取动作信息
 func (mqg *MQLGroupRequest) Append(mqr *MQLRequest) error {
 	mqr, e := mqr.init(mqg.mqrn + 1)
 	if e != nil {

+ 30 - 9
odbctest/odbcmql/mql_run.go

@@ -181,6 +181,7 @@ mql语句扩展说明:
 		rand      0 ~ 1000000 之间的随机整数
 		now	      当前时间,格式标记 t 相当于 2006-01-02 15:04:05
   mql语句中第一个 /** 到 最后一个 **/ 之间的内容可以标注执行若干预定义动作,多个动作标注用空格分隔
+  无法解析为预定义动作的内容作为普通注释直接跳过,不会报错
   如 /** output() sleep(1) **/ 表示忽略当前语句执行过程中的任何报错,执行完成后等待一秒后再继续执行下一语句
   目前支持的预定义动作如下:
    skip()                    跳过当前语句,以及其它的所有预定义动作
@@ -226,6 +227,7 @@ mql语句扩展说明:
    equal(N,F,V)        判断返回结果中第 N 条数据的字段 F 的值是否为 V
    match(Kn,Mn)        检查返回结果中字段 Kn 值为 Mn 的记录是否存在,参数 Kn,Mn 可以有多个,需要成对出现
    matchcount(Kn,Mn,N) 检查返回结果中字段 Kn 值为 Mn 的记录数是否为 N,参数 Kn,Mn 可以有多个,需要成对出现,N为自然数
+  需要一次顺序执行多条语句时,可将多条语句包含在 multilines begin; 和 multilines end; 之间,多条语句之间用分号 ; 分隔
 
 例:循环遍历执行当前路径下的所有 mql 文件
    ./mql .
@@ -644,28 +646,47 @@ func (mt *MQLTest) RunFile(t *testing.T, ctx context.Context,
 		if !hasnext {
 			break
 		}
+		// 去掉注释
+		clean_mql := strings.Join(spliter.MQLSplitClean(mql), ";")
 		if multilines != nil {
-			if strings.TrimSpace(mql) == "multilines end" {
+			// 多条语句处理
+			if strings.TrimSpace(clean_mql) == "multilines end" {
+				// 保留语句中的注释
+				tm := strings.TrimSpace(strings.Replace(mql, "multilines end", "", 1))
+				if len(tm) > 0 {
+					if multilines.OriginQueryString != "" {
+						multilines.OriginQueryString += ";"
+					}
+					multilines.OriginQueryString += tm
+				}
+				multilines.Toline = toline
+				multilines.Tochar = tochar
+				// 加入请求组,并初始化,提取动作信息
 				e := mqgr.Append(multilines)
 				if !assert.Nil(t, e, e) {
 					return false
 				}
 				multilines = nil
-			} else if multilines.OriginQueryString == "" {
-				multilines.OriginQueryString = mql
-				multilines.Fromline = fromline
-				multilines.Toline = toline
-				multilines.Fromchar = fromchar
-				multilines.Tochar = tochar
 			} else {
-				multilines.OriginQueryString += ";" + mql
+				if multilines.OriginQueryString != "" {
+					multilines.OriginQueryString += ";"
+				}
+				multilines.OriginQueryString += mql
 				multilines.Toline = toline
 				multilines.Tochar = tochar
 			}
-		} else if strings.TrimSpace(mql) == "multilines begin" {
+		} else if strings.TrimSpace(clean_mql) == "multilines begin" {
 			multilines = &MQLRequest{FilePath: ffpath}
+			// 保留语句中的注释
+			multilines.OriginQueryString = strings.TrimSpace(strings.Replace(mql, "multilines begin", "", 1))
+			multilines.Fromline = fromline
+			multilines.Fromchar = fromchar
+			multilines.Toline = toline
+			multilines.Tochar = tochar
 		} else {
+			// 单条语句
 			mqr := &MQLRequest{OriginQueryString: mql, FilePath: ffpath, Fromline: fromline, Toline: toline, Fromchar: fromchar, Tochar: tochar}
+			// 加入请求组,并初始化,提取动作信息
 			e := mqgr.Append(mqr)
 			if !assert.Nil(t, e, e) {
 				return false

+ 1 - 1
odbctest/odbcmql/mqls_do.go

@@ -267,7 +267,7 @@ func (mt *MQLTest) RunMQLTryOnce(t *testing.T, ctx context.Context,
 	if len(mqls) == 0 {
 		mqlstr = ""
 	} else {
-		mqlstr = mqls[0]
+		mqlstr = strings.Join(mqls, ";\r\n")
 	}
 	mqlstr = strings.TrimSpace(mqlstr)
 	if mqlstr == "" {