Skip to content

Commit fd1ca70

Browse files
committed
- Enhance JSON tables handling.
modified: storage/connect/json.cpp storage/connect/json.h storage/connect/mysql-test/connect/r/json.result storage/connect/mysql-test/connect/t/json.test storage/connect/tabjson.cpp storage/connect/tabjson.h - Avoid crash when a partition table name pattern is ill formed (such as using place holder %i instead of %s) modified: storage/connect/ha_connect.cc
1 parent 9a2dc7d commit fd1ca70

File tree

7 files changed

+326
-232
lines changed

7 files changed

+326
-232
lines changed

storage/connect/ha_connect.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -997,8 +997,12 @@ char *ha_connect::GetRealString(const char *s)
997997
char *sv;
998998

999999
if (IsPartitioned() && s) {
1000-
sv= (char*)PlugSubAlloc(xp->g, NULL, strlen(s) + strlen(partname));
1000+
// sv= (char*)PlugSubAlloc(xp->g, NULL, strlen(s) + strlen(partname));
1001+
// With wrong string pattern, the size of the constructed string
1002+
// can be more than strlen(s) + strlen(partname)
1003+
sv= (char*)PlugSubAlloc(xp->g, NULL, 0);
10011004
sprintf(sv, s, partname);
1005+
PlugSubAlloc(xp->g, NULL, strlen(sv) + 1);
10021006
} else
10031007
sv= (char*)s;
10041008

storage/connect/json.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -576,9 +576,9 @@ bool SerializeObject(JOUT *js, PJOB jobp)
576576
else if (js->WriteChr(','))
577577
return true;
578578

579-
if (js->WriteChr('\"') ||
579+
if (js->WriteChr('"') ||
580580
js->WriteStr(pair->Key) ||
581-
js->WriteChr('\"') ||
581+
js->WriteChr('"') ||
582582
js->WriteChr(':') ||
583583
SerializeValue(js, pair->Val))
584584
return true;
@@ -725,13 +725,13 @@ bool JOUTFILE::Escape(const char *s)
725725

726726
for (unsigned int i = 0; i < strlen(s); i++)
727727
switch (s[i]) {
728+
case '"': fputs("\\\"", Stream); break;
729+
case '\\': fputs("\\\\", Stream); break;
728730
case '\t': fputs("\\t", Stream); break;
729731
case '\n': fputs("\\n", Stream); break;
730732
case '\r': fputs("\\r", Stream); break;
731733
case '\b': fputs("\\b", Stream); break;
732734
case '\f': fputs("\\f", Stream); break;
733-
case '\\': fputs("\\\\", Stream); break;
734-
case '"': fputs("\\\"", Stream); break;
735735
default:
736736
fputc(s[i], Stream);
737737
break;

storage/connect/json.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ enum JTYP {TYPE_STRG = 1,
1818
TYPE_BOOL = 4,
1919
TYPE_INTG = 7,
2020
TYPE_JSON = 12,
21-
TYPE_JAR, TYPE_JOB,
21+
TYPE_JAR,
22+
TYPE_JOB,
2223
TYPE_JVAL};
2324

2425
class JOUT;

storage/connect/mysql-test/connect/r/json.result

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher L
8989
UPDATE t1 SET AuthorFN = 'Philippe' WHERE AuthorLN = 'Knab';
9090
SELECT * FROM t1 WHERE ISBN = '9782212090819';
9191
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
92-
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
93-
9782212090819 fr applications Philippe Knab Construire une application XML Eyrolles Paris 1999
92+
9782212090819 fr applications Philippe Bernadac Construire une application XML Eyrolles Paris 1999
93+
9782212090819 fr applications Fran�ois Knab Construire une application XML Eyrolles Paris 1999
9494
#
9595
# To add an author a new table must be created
9696
#
@@ -104,8 +104,8 @@ William J. Pardi
104104
INSERT INTO t2 VALUES('Charles','Dickens');
105105
SELECT * FROM t1;
106106
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
107-
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
108-
9782212090819 fr applications Philippe Knab Construire une application XML Eyrolles Paris 1999
107+
9782212090819 fr applications Philippe Bernadac Construire une application XML Eyrolles Paris 1999
108+
9782212090819 fr applications Fran�ois Knab Construire une application XML Eyrolles Paris 1999
109109
9782840825685 fr applications William J. Pardi XML en Action adapt� de l'anglais par James Guerin Microsoft Press Paris 1999
110110
9782840825685 fr applications Charles Dickens XML en Action adapt� de l'anglais par James Guerin Microsoft Press Paris 1999
111111
DROP TABLE t1;
@@ -127,11 +127,11 @@ line
127127
"SUBJECT": "applications",
128128
"AUTHOR": [
129129
{
130-
"FIRSTNAME": "Jean-Christophe",
130+
"FIRSTNAME": "Philippe",
131131
"LASTNAME": "Bernadac"
132132
},
133133
{
134-
"FIRSTNAME": "Philippe",
134+
"FIRSTNAME": "Fran�ois",
135135
"LASTNAME": "Knab"
136136
}
137137
],
@@ -192,7 +192,7 @@ Janet 4 Car 17.00
192192
Janet 5 Beer+Car+Beer+Food 57.00
193193
DROP TABLE t1;
194194
#
195-
# Cannot be fully expanded
195+
# Now it can be fully expanded
196196
#
197197
CREATE TABLE t1 (
198198
WHO CHAR(12),
@@ -201,7 +201,31 @@ WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT',
201201
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT')
202202
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
203203
SELECT * FROM t1;
204-
ERROR HY000: Got error 174 'Cannot expand more than one array' from CONNECT
204+
WHO WEEK WHAT AMOUNT
205+
Joe 3 Beer 18.00
206+
Joe 3 Food 12.00
207+
Joe 3 Food 19.00
208+
Joe 3 Car 20.00
209+
Joe 4 Beer 19.00
210+
Joe 4 Beer 16.00
211+
Joe 4 Food 17.00
212+
Joe 4 Food 17.00
213+
Joe 4 Beer 14.00
214+
Joe 5 Beer 14.00
215+
Joe 5 Food 12.00
216+
Beth 3 Beer 16.00
217+
Beth 4 Food 17.00
218+
Beth 4 Beer 15.00
219+
Beth 5 Food 12.00
220+
Beth 5 Beer 20.00
221+
Janet 3 Car 19.00
222+
Janet 3 Food 18.00
223+
Janet 3 Beer 18.00
224+
Janet 4 Car 17.00
225+
Janet 5 Beer 14.00
226+
Janet 5 Car 12.00
227+
Janet 5 Beer 19.00
228+
Janet 5 Food 12.00
205229
DROP TABLE t1;
206230
#
207231
# Expand expense in 3 one week tables

storage/connect/mysql-test/connect/t/json.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,15 @@ SELECT * FROM t1;
128128
DROP TABLE t1;
129129

130130
--echo #
131-
--echo # Cannot be fully expanded
131+
--echo # Now it can be fully expanded
132132
--echo #
133133
CREATE TABLE t1 (
134134
WHO CHAR(12),
135135
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
136136
WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT',
137137
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT')
138138
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
139-
--error ER_GET_ERRMSG
139+
#--error ER_GET_ERRMSG
140140
SELECT * FROM t1;
141141
DROP TABLE t1;
142142

0 commit comments

Comments
 (0)