wecisecode 2 недель назад
Родитель
Сommit
f7b3a34b4a

Разница между файлами не показана из-за своего большого размера
+ 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
 	return
 }
 }
 
 
+// 加入请求组,并初始化,提取动作信息
 func (mqg *MQLGroupRequest) Append(mqr *MQLRequest) error {
 func (mqg *MQLGroupRequest) Append(mqr *MQLRequest) error {
 	mqr, e := mqr.init(mqg.mqrn + 1)
 	mqr, e := mqr.init(mqg.mqrn + 1)
 	if e != nil {
 	if e != nil {

+ 30 - 9
odbctest/odbcmql/mql_run.go

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