Skip to content

Commit 1745a69

Browse files
authored
Add tlist function pushdown support and Bug fixes
Support function pushdown in the target list (for PGSpider) Bug fixes - Fix FETCH ... WITH TIES issue - Fix sqlite_fdw does not bind the correct numeric value when it is sub-query
1 parent 0f673fc commit 1745a69

24 files changed

+1552
-295
lines changed

Jenkinsfile

Lines changed: 164 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,16 @@
11
def NODE_NAME = 'AWS_Instance_CentOS'
22
def MAIL_TO = '$DEFAULT_RECIPIENTS'
3-
def MAIL_SUBJECT = '[CI PGSpider] SQLite FDW Test FAILED ' + BRANCH_NAME
4-
def BUILD_INFO = 'Jenkins job: ' + env.BUILD_URL
53
def BRANCH_NAME = 'Branch [' + env.BRANCH_NAME + ']'
4+
def BUILD_INFO = 'Jenkins job: ' + env.BUILD_URL + '\n'
5+
6+
def POSTGRES_DOCKER_PATH = '/home/jenkins/Docker/Server/Postgres'
7+
def ENHANCE_TEST_DOCKER_PATH = '/home/jenkins/Docker'
8+
def TEST_TYPE = 'SQLITE'
9+
10+
START_EXISTED_TEST = ''
11+
START_ENHANCE_TEST = ''
12+
INIT_ENHANCE_TEST = ''
613

7-
def retrySh(String shCmd) {
8-
def MAX_RETRY = 10
9-
script {
10-
int status = 1;
11-
for (int i = 0; i < MAX_RETRY; i++) {
12-
status = sh(returnStatus: true, script: shCmd)
13-
if (status == 0) {
14-
echo "SUCCESS: " + shCmd
15-
break
16-
} else {
17-
echo "RETRY: " + shCmd
18-
sleep 5
19-
}
20-
}
21-
if (status != 0) {
22-
sh(shCmd)
23-
}
24-
}
25-
}
2614

2715
pipeline {
2816
agent {
@@ -33,7 +21,7 @@ pipeline {
3321
options {
3422
gitLabConnection('GitLabConnection')
3523
}
36-
triggers {
24+
triggers {
3725
gitlab(
3826
triggerOnPush: true,
3927
triggerOnMergeRequest: false,
@@ -46,76 +34,184 @@ pipeline {
4634
)
4735
}
4836
stages {
49-
stage('Build') {
37+
stage('Start_containers_Existed_Test') {
5038
steps {
51-
sh '''
52-
rm -rf postgresql-13beta2 || true
53-
tar -zxvf /home/jenkins/Postgres/postgresql-13beta2.tar.gz > /dev/null
54-
cd postgresql-13beta2
55-
./configure --prefix=$(pwd)/install > /dev/null
56-
make clean && make > /dev/null
57-
'''
58-
dir("postgresql-13beta2/contrib") {
59-
sh 'rm -rf sqlite_fdw || true'
60-
retrySh('git clone -b ' + env.GIT_BRANCH + ' ' + env.GIT_URL)
39+
script {
40+
if (env.GIT_URL != null) {
41+
BUILD_INFO = BUILD_INFO + "Git commit: " + env.GIT_URL.replace(".git", "/commit/") + env.GIT_COMMIT + "\n"
42+
}
43+
}
44+
catchError() {
45+
sh """
46+
cd ${POSTGRES_DOCKER_PATH}
47+
docker build -t postgresserver .
48+
docker run -d --name postgresserver_for_sqlite_existed_test postgresserver
49+
"""
6150
}
6251
}
6352
post {
6453
failure {
65-
echo '** BUILD FAILED !!! NEXT STAGE WILL BE SKIPPED **'
66-
emailext subject: "${MAIL_SUBJECT}", body: BUILD_INFO + "\nGit commit: " + env.GIT_URL.replace(".git", "/commit/") + env.GIT_COMMIT + "\n" + '${BUILD_LOG, maxLines=200, escapeHtml=false}', to: "${MAIL_TO}", attachLog: false
54+
script {
55+
START_EXISTED_TEST = 'FAILED'
56+
}
6757
updateGitlabCommitStatus name: 'Build', state: 'failed'
6858
}
6959
success {
60+
script {
61+
START_EXISTED_TEST = 'SUCCESS'
62+
}
7063
updateGitlabCommitStatus name: 'Build', state: 'success'
7164
}
7265
}
7366
}
74-
stage('sqlite_fdw_test') {
67+
stage('make_check_Existed_Test') {
7568
steps {
76-
dir("postgresql-13beta2/contrib/sqlite_fdw") {
77-
catchError() {
78-
sh '''
79-
chmod +x *.sh
80-
./test.sh
81-
'''
69+
catchError() {
70+
sh """
71+
rm -rf make_check_existed_test.out || true
72+
docker exec postgresserver_for_sqlite_existed_test /bin/bash -c 'su -c "/tmp/sqlite_existed_test.sh ${env.GIT_BRANCH}" postgres'
73+
docker cp postgresserver_for_sqlite_existed_test:/home/postgres/postgresql-13beta2/contrib/sqlite_fdw/make_check.out make_check_existed_test.out
74+
"""
75+
}
76+
script {
77+
status = sh(returnStatus: true, script: "grep -q 'All [0-9]* tests passed' 'make_check_existed_test.out'")
78+
if (status != 0) {
79+
unstable(message: "Set UNSTABLE result")
80+
sh 'docker cp postgresserver_for_sqlite_existed_test:/home/postgres/postgresql-13beta2/contrib/sqlite_fdw/regression.diffs regression.diffs'
81+
sh 'cat regression.diffs || true'
82+
updateGitlabCommitStatus name: 'make_check', state: 'failed'
83+
} else {
84+
updateGitlabCommitStatus name: 'make_check', state: 'success'
8285
}
86+
}
87+
}
88+
}
89+
stage('Start_containers_Enhance_Test') {
90+
steps {
91+
catchError() {
92+
sh """
93+
cd ${ENHANCE_TEST_DOCKER_PATH}
94+
docker-compose up --build -d
95+
"""
96+
}
97+
}
98+
post {
99+
failure {
83100
script {
84-
status = sh(returnStatus: true, script: "grep -q 'All [0-9]* tests passed' 'make_check.out'")
85-
if (status != 0) {
86-
unstable(message: "Set UNSTABLE result")
87-
emailext subject: "${MAIL_SUBJECT}", body: BUILD_INFO + "\nGit commit: " + env.GIT_URL.replace(".git", "/commit/") + env.GIT_COMMIT + "\n" + '${FILE,path="make_check.out"}', to: "${MAIL_TO}", attachLog: false
88-
sh 'cat regression.diffs || true'
89-
updateGitlabCommitStatus name: 'sqlite_fdw_test', state: 'failed'
90-
} else {
91-
updateGitlabCommitStatus name: 'sqlite_fdw_test', state: 'success'
92-
}
101+
START_ENHANCE_TEST = 'FAILED'
93102
}
103+
updateGitlabCommitStatus name: 'Build', state: 'failed'
104+
}
105+
success {
106+
script {
107+
START_ENHANCE_TEST = 'SUCCESS'
108+
}
109+
updateGitlabCommitStatus name: 'Build', state: 'success'
94110
}
95111
}
96112
}
97-
stage('sqlite_fdw_test_extra') {
113+
stage('Initialize_for_Enhance_Test') {
98114
steps {
99-
dir("postgresql-13beta2/contrib/sqlite_fdw") {
100-
catchError() {
101-
sh '''
102-
chmod +x *.sh
103-
./test_extra.sh
104-
'''
115+
catchError() {
116+
sh """
117+
docker exec mysqlserver1_enhance_test /bin/bash -c '/tmp/start_enhance_test.sh'
118+
docker exec mysqlserver2_enhance_test /bin/bash -c '/tmp/start_enhance_test.sh'
119+
docker exec postgresserver1_enhance_test /bin/bash -c '/tmp/start_enhance_test_1.sh'
120+
docker exec postgresserver2_enhance_test /bin/bash -c '/tmp/start_enhance_test_2.sh'
121+
docker exec tinybraceserver1_enhance_test /bin/bash -c '/tmp/start_enhance_test_1.sh'
122+
docker exec -d -w /usr/local/tinybrace tinybraceserver1_enhance_test /bin/bash -c 'bin/tbserver &'
123+
docker exec tinybraceserver2_enhance_test /bin/bash -c '/tmp/start_enhance_test_2.sh'
124+
docker exec -d -w /usr/local/tinybrace tinybraceserver2_enhance_test /bin/bash -c 'bin/tbserver &'
125+
docker exec influxserver1_enhance_test /bin/bash -c '/tmp/start_enhance_test.sh'
126+
docker exec influxserver2_enhance_test /bin/bash -c '/tmp/start_enhance_test.sh'
127+
docker exec -d gridserver1_enhance_test /bin/bash -c '/tmp/start_enhance_test_1.sh'
128+
sleep 10
129+
docker exec -d gridserver2_enhance_test /bin/bash -c '/tmp/start_enhance_test_2.sh'
130+
sleep 10
131+
docker exec pgspiderserver1_enhance_test /bin/bash -c 'su -c "/tmp/start_enhance_test.sh ${env.GIT_BRANCH} ${TEST_TYPE}" pgspider'
132+
"""
133+
}
134+
}
135+
post {
136+
failure {
137+
script {
138+
INIT_ENHANCE_TEST = 'FAILED'
105139
}
140+
updateGitlabCommitStatus name: 'Init_Data', state: 'failed'
141+
}
142+
success {
106143
script {
107-
status = sh(returnStatus: true, script: "grep -q 'All [0-9]* tests passed' 'make_check.out'")
108-
if (status != 0) {
109-
unstable(message: "Set UNSTABLE result")
110-
emailext subject: "${MAIL_SUBJECT}", body: BUILD_INFO + "\nGit commit: " + env.GIT_URL.replace(".git", "/commit/") + env.GIT_COMMIT + "\n" + '${FILE,path="make_check.out"}', to: "${MAIL_TO}", attachLog: false
111-
sh 'cat regression.diffs || true'
112-
updateGitlabCommitStatus name: 'sqlite_fdw_test_extra', state: 'failed'
113-
} else {
114-
updateGitlabCommitStatus name: 'sqlite_fdw_test_extra', state: 'success'
115-
}
144+
INIT_ENHANCE_TEST = 'SUCCESS'
145+
}
146+
updateGitlabCommitStatus name: 'Init_Data', state: 'success'
147+
}
148+
}
149+
}
150+
stage('make_check_Enhance_Test') {
151+
steps {
152+
catchError() {
153+
sh """
154+
rm -rf make_check_enhance_test.out regression.diffs || true
155+
docker exec -w /home/pgspider/GIT/PGSpider/contrib/pgspider_core_fdw pgspiderserver1_enhance_test /bin/bash -c 'su -c "chmod a+x *.sh" pgspider'
156+
docker exec -w /home/pgspider/GIT/PGSpider/contrib/pgspider_core_fdw pgspiderserver1_enhance_test /bin/bash -c "sed -i 's/enhance\\\\\\\\\\/BasicFeature1_File_4ARG enhance\\\\\\\\\\/BasicFeature1_File_AllARG enhance\\\\\\\\\\/BasicFeature1_GridDB_4ARG enhance\\\\\\\\\\/BasicFeature1_GridDB_AllARG enhance\\\\\\\\\\/BasicFeature1_InfluxDB_4ARG enhance\\\\\\\\\\/BasicFeature1_InfluxDB_AllARG enhance\\\\\\\\\\/BasicFeature1_MySQL_4ARG enhance\\\\\\\\\\/BasicFeature1_MySQL_AllARG enhance\\\\\\\\\\/BasicFeature1_PostgreSQL_4ARG enhance\\\\\\\\\\/BasicFeature1_PostgreSQL_AllARG enhance\\\\\\\\\\/BasicFeature1_SQLite_4ARG enhance\\\\\\\\\\/BasicFeature1_SQLite_AllARG enhance\\\\\\\\\\/BasicFeature1_TinyBrace_4ARG enhance\\\\\\\\\\/BasicFeature1_TinyBrace_AllARG enhance\\\\\\\\\\/BasicFeature1_t_max_range enhance\\\\\\\\\\/BasicFeature1_tmp_t15_4ARG enhance\\\\\\\\\\/BasicFeature1_tmp_t15_AllARG enhance\\\\\\\\\\/BasicFeature2_JOIN_Multi_Tbl enhance\\\\\\\\\\/BasicFeature2_SELECT_Muli_Tbl enhance\\\\\\\\\\/BasicFeature2_UNION_Multi_Tbl enhance\\\\\\\\\\/BasicFeature_Additional_Test enhance\\\\\\\\\\/BasicFeature_ComplexCommand enhance\\\\\\\\\\/BasicFeature_For_Bug_54 enhance\\\\\\\\\\/BasicFeature_For_Bug_60/enhance\\\\\\\\\\/BasicFeature1_SQLite_4ARG enhance\\\\\\\\\\/BasicFeature1_SQLite_AllARG/g' test_enhance.sh"
157+
docker exec -w /home/pgspider/GIT/PGSpider/contrib/pgspider_core_fdw pgspiderserver1_enhance_test /bin/bash -c 'su -c "./test_enhance.sh" pgspider'
158+
docker cp pgspiderserver1_enhance_test:/home/pgspider/GIT/PGSpider/contrib/pgspider_core_fdw/make_check.out make_check_enhance_test.out
159+
"""
160+
}
161+
script {
162+
status = sh(returnStatus: true, script: "grep -q 'All [0-9]* tests passed' 'make_check_enhance_test.out'")
163+
if (status != 0) {
164+
unstable(message: "Set UNSTABLE result")
165+
sh 'docker cp pgspiderserver1_enhance_test:/home/pgspider/GIT/PGSpider/contrib/pgspider_core_fdw/regression.diffs regression.diffs'
166+
sh 'cat regression.diffs || true'
167+
updateGitlabCommitStatus name: 'make_check', state: 'failed'
168+
} else {
169+
updateGitlabCommitStatus name: 'make_check', state: 'success'
116170
}
117171
}
118172
}
119173
}
120174
}
121-
}
175+
post {
176+
success {
177+
script {
178+
prevResult = 'SUCCESS'
179+
if (currentBuild.previousBuild != null) {
180+
prevResult = currentBuild.previousBuild.result.toString()
181+
}
182+
if (prevResult != 'SUCCESS') {
183+
emailext subject: '[CI SQLITE_FDW] InfluxDB_Test BACK TO NORMAL on ' + BRANCH_NAME, body: BUILD_INFO + '\n---------EXISTED_TEST---------\n' + '${FILE,path="make_check_existed_test.out"}' + '\n---------ENHANCE_TEST---------\n' + '${FILE,path="make_check_enhance_test.out"}', to: "${MAIL_TO}", attachLog: false
184+
}
185+
}
186+
}
187+
unsuccessful {
188+
script {
189+
if (START_EXISTED_TEST == 'FAILED') {
190+
if (START_ENHANCE_TEST == 'FAILED') {
191+
emailext subject: '[CI SQLITE_FDW] EXISTED_TEST: Start Containers FAILED | ENHANCE_TEST: Start Containers FAILED ' + BRANCH_NAME, body: BUILD_INFO + '${BUILD_LOG, maxLines=200, escapeHtml=false}', to: "${MAIL_TO}", attachLog: false
192+
} else if (INIT_ENHANCE_TEST == 'FAILED') {
193+
emailext subject: '[CI SQLITE_FDW] EXISTED_TEST: Start Containers FAILED | ENHANCE_TEST: Initialize FAILED ' + BRANCH_NAME, body: BUILD_INFO + '${BUILD_LOG, maxLines=200, escapeHtml=false}', to: "${MAIL_TO}", attachLog: false
194+
} else {
195+
emailext subject: '[CI SQLITE_FDW] EXISTED_TEST: Start Containers FAILED | ENHANCE_TEST: Result make check ' + BRANCH_NAME, body: BUILD_INFO + '${FILE,path="make_check_enhance_test.out"}', to: "${MAIL_TO}", attachLog: false
196+
}
197+
} else {
198+
if (START_ENHANCE_TEST == 'FAILED') {
199+
emailext subject: '[CI SQLITE_FDW] EXISTED_TEST: Result make check | ENHANCE_TEST: Start Containers FAILED ' + BRANCH_NAME, body: BUILD_INFO + '${FILE,path="make_check_existed_test.out"}', to: "${MAIL_TO}", attachLog: false
200+
} else if (INIT_ENHANCE_TEST == 'FAILED') {
201+
emailext subject: '[CI SQLITE_FDW] EXISTED_TEST: Result make check | ENHANCE_TEST: Initialize FAILED ' + BRANCH_NAME, body: BUILD_INFO + '${FILE,path="make_check_existed_test.out"}', to: "${MAIL_TO}", attachLog: false
202+
} else {
203+
emailext subject: '[CI SQLITE_FDW] EXISTED_TEST: Result make check | ENHANCE_TEST: Result make check ' + BRANCH_NAME, body: BUILD_INFO + '\n---------EXISTED_TEST---------\n' + '${FILE,path="make_check_existed_test.out"}' + '\n---------ENHANCE_TEST---------\n' + '${FILE,path="make_check_enhance_test.out"}', to: "${MAIL_TO}", attachLog: false
204+
}
205+
}
206+
}
207+
}
208+
always {
209+
sh """
210+
docker stop postgresserver_for_sqlite_existed_test
211+
docker rm postgresserver_for_sqlite_existed_test
212+
cd ${ENHANCE_TEST_DOCKER_PATH}
213+
docker-compose down
214+
"""
215+
}
216+
}
217+
}

META.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
"name": "sqlite_fdw",
33
"abstract": "Foreign Data Wrapper for SQLite databases",
44
"description": "PostgreSQL extension which implements a Foreign Data Wrapper (FDW) for SQLite databases.",
5-
"version": "1.2.0",
5+
"version": "1.3.1",
66
"maintainer": "mochizk",
77
"license": "postgresql",
88
"provides": {
99
"sqlite_fdw": {
1010
"abstract": "Foreign Data Wrapper for SQLite databases",
1111
"file": "sqlite_fdw.c",
1212
"docfile": "README.md",
13-
"version": "1.2.0"
13+
"version": "1.3.1"
1414
}
1515
},
1616
"prereqs": {

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ OBJS = connection.o option.o deparse.o sqlite_query.o sqlite_fdw.o
1515
EXTENSION = sqlite_fdw
1616
DATA = sqlite_fdw--1.0.sql
1717

18-
REGRESS = extra/sqlite_fdw_post extra/float4 extra/float8 extra/int4 extra/int8 extra/numeric extra/join extra/limit extra/aggregates extra/prepare extra/select_having extra/select extra/insert extra/update extra/timestamp sqlite_fdw type aggregate
18+
REGRESS = extra/sqlite_fdw_post extra/float4 extra/float8 extra/int4 extra/int8 extra/numeric extra/join extra/limit extra/aggregates extra/prepare extra/select_having extra/select extra/insert extra/update extra/timestamp sqlite_fdw type aggregate selectfunc
1919

2020
SQLITE_LIB = sqlite3
2121

0 commit comments

Comments
 (0)