Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
第
第六阶段
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸大学计算机学院
教师群组
王晓庆-wangxiaoqing
数据库
temp
第六阶段
提交
c6a6e73b
提交
c6a6e73b
7月 28, 2020
创建
作者:
王晓庆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7/28
上级
da87519b
流水线
#118180
已失败 于阶段
用时 24 秒
变更
5
流水线
1
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
26 行增加
和
18 行删除
+26
-18
.gitlab-ci.yml
.gitlab-ci.yml
+3
-3
createdb.sql
createdb.sql
+6
-2
createtable.sql
createtable.sql
+2
-0
local_test.py
local_test.py
+2
-3
testcases.py
testcases.py
+13
-10
没有找到文件。
.gitlab-ci.yml
浏览文件 @
c6a6e73b
...
...
@@ -14,7 +14,7 @@ case1:
<<
:
*codecode-runner
script
:
-
/opt/mssql/bin/sqlservr > /dev/null &
-
python3 testcases.py 1
-
python3 testcases.py
ci_test
1
-
diff output1.txt user_output1.txt -b -B -y -i -W 100
-
echo -e "\n*******************************************\nexec-score 60\n*******************************************\n"
only
:
...
...
@@ -40,7 +40,7 @@ case2:
<<
:
*codecode-runner
script
:
-
/opt/mssql/bin/sqlservr > /dev/null &
-
python3 testcases.py 2
-
python3 testcases.py
ci_test
2
-
diff output2.txt user_output2.txt -b -B -y -i -W 100
-
echo -e "\n*******************************************\nexec-score 80\n*******************************************\n"
only
:
...
...
@@ -66,7 +66,7 @@ case3:
<<
:
*codecode-runner
script
:
-
/opt/mssql/bin/sqlservr > /dev/null &
-
python3 testcases.py 3
-
python3 testcases.py
ci_test
3
-
diff output3.txt user_output3.txt -b -B -y -i -W 100
-
echo -e "\n*******************************************\nexec-score 100\n*******************************************\n"
only
:
...
...
createdb.sql
浏览文件 @
c6a6e73b
IF
db_id
(
'TPCH'
)
IS
NULL
CREATE
DATABASE
TPCH
-- 每次建库前先将原来的库删掉
IF
db_id
(
'TPCH'
)
IS
NOT
NULL
USE
master
ALTER
DATABASE
TPCH
SET
SINGLE_USER
WITH
ROLLBACK
IMMEDIATE
DROP
DATABASE
TPCH
CREATE
DATABASE
TPCH
createtable.sql
浏览文件 @
c6a6e73b
USE
TPCH
-- 建表
IF
OBJECT_ID
(
'region'
,
'U'
)
IS
NULL
CREATE
TABLE
region
(
regionkey
INTEGER
PRIMARY
KEY
,
...
...
@@ -98,6 +99,7 @@ IF OBJECT_ID('lineitem', 'U') IS NULL
FOREIGN
KEY
(
partkey
,
suppkey
)
REFERENCES
PartSupp
(
partkey
,
suppkey
)
/* extendedprice = quantity*Part.retailprice */
)
-- 插入数据
-- region
-- regionkey, name, comment
INSERT
INTO
region
VALUES
(
'1'
,
'亚洲'
,
'亚洲地区'
)
...
...
local_test.py
浏览文件 @
c6a6e73b
...
...
@@ -103,7 +103,7 @@ def compare_file(file1, file2, seqNum):
if
__name__
==
"__main__"
:
print
()
print
(
Fore
.
YELLOW
+
"提示:
\n
1. 启用验证前一定要先保存 sql 文件。
\n
2.
如果验证程序长时间未结束,说明源代码中可能存在死循环。请停止验证程序,修改源代码后再验证
。"
,
file
=
stream
)
print
(
Fore
.
YELLOW
+
"提示:
\n
1. 启用验证前一定要先保存 sql 文件。
\n
2.
每次启动验证,均会重新创建数据库、数据表和插入数据
。"
,
file
=
stream
)
print
(
Fore
.
WHITE
,
file
=
stream
)
# 移除比较结果文件
...
...
@@ -121,8 +121,7 @@ if __name__ == "__main__":
break
print
(
"
\n
正在验证 case{0}。
\n
正在将 python 程序的输出内容保存到文件 {1} 中。"
.
format
(
seqNum
,
useroutputFile
))
# 将对应的case号当参数传入
runCommand
=
"python testcases.py {0}"
.
format
(
seqNum
)
print
(
Fore
.
RED
+
runCommand
,
file
=
stream
)
runCommand
=
"python testcases.py local_test {0}"
.
format
(
seqNum
)
execResult
=
os
.
system
(
runCommand
)
if
execResult
!=
0
:
print
(
Fore
.
RED
+
"应用程序异常,返回值:{0}"
.
format
(
execResult
),
file
=
stream
)
...
...
testcases.py
浏览文件 @
c6a6e73b
...
...
@@ -10,9 +10,11 @@ import pandas as pd
import
sys
# 取得sql文件名称
sql_file
=
"query"
+
sys
.
argv
[
1
]
+
".sql"
user_output_txt_file
=
"user_output"
+
sys
.
argv
[
1
]
+
".txt"
user_output_csv_file
=
"user_output"
+
sys
.
argv
[
1
]
+
".csv"
sql_file
=
"query"
+
sys
.
argv
[
2
]
+
".sql"
user_output_txt_file
=
"user_output"
+
sys
.
argv
[
2
]
+
".txt"
user_output_csv_file
=
"user_output"
+
sys
.
argv
[
2
]
+
".csv"
# 验证类型:本地--local_test,线上--ci_test
test_type
=
sys
.
argv
[
1
]
# 可能连接数据库时需要消耗一点时间,这里用循环的方式
def
get_conn
():
...
...
@@ -21,13 +23,13 @@ def get_conn():
try
:
# 调用远程driver,获取成功即返回
if
i
==
0
:
# 等待
1
秒后重新获取
# 等待
5
秒后重新获取
sleep
(
5
)
elif
i
==
1
:
# 等待
5
秒后重新获取
# 等待
10
秒后重新获取
sleep
(
10
)
else
:
# 等待1
0
秒后重新获取
# 等待1
5
秒后重新获取
sleep
(
15
)
# 根据平台不同采用不同的连接方式
if
sys
.
platform
==
'linux'
:
...
...
@@ -46,7 +48,7 @@ def get_conn():
# 将sql文件的内容转换成字符串
def
parse_sql
(
filename
):
# 读取 sql 文件文本内容,sqltxt 为 list 类型
sql
=
open
(
filename
,
'r'
,
encoding
=
'utf8'
)
sql
=
open
(
filename
,
'r'
,
encoding
=
'utf
-
8'
)
sqltxt
=
sql
.
readlines
()
# 读取之后关闭文件
...
...
@@ -56,6 +58,7 @@ def parse_sql(filename):
sql
=
""
.
join
(
sqltxt
)
return
sql
# return sql.encode('gbk')
# 主函数
if
__name__
==
'__main__'
:
...
...
@@ -64,8 +67,8 @@ if __name__ == '__main__':
conn
=
get_conn
()
cursor
=
conn
.
cursor
()
# 只有
第一次运行case
时才建库、建表
if
int
(
sys
.
argv
[
1
])
==
1
:
# 只有
本地验证第一次运行case或者线上验证
时才建库、建表
if
(
int
(
sys
.
argv
[
2
])
==
1
and
test_type
==
"local_test"
)
or
test_type
==
"ci_test"
:
# 创建测试数据库
createdb_sql
=
parse_sql
(
'createdb.sql'
)
conn
.
autocommit
(
True
)
...
...
@@ -75,7 +78,7 @@ if __name__ == '__main__':
# 创建数据库表
createtable_sql
=
parse_sql
(
'createtable.sql'
)
cursor
.
execute
(
createtable_sql
)
#
conn.commit()
conn
.
commit
()
# 运行学生代码
query_sql
=
parse_sql
(
sql_file
)
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论