Skip to content

Commit 5c8862e

Browse files
committed
- Fix crash when Json_Value was called without arguments.
Correct memory calculation in Serialize. Correct some UDF's messages. Add and modify the json tests removed: storage/connect/mysql-test/connect/std_data/biblio.jsn storage/connect/mysql-test/connect/std_data/expense.jsn storage/connect/mysql-test/connect/std_data/mulexp3.jsn storage/connect/mysql-test/connect/std_data/mulexp4.jsn storage/connect/mysql-test/connect/std_data/mulexp5.jsn added: storage/connect/mysql-test/connect/r/json_udf.result storage/connect/mysql-test/connect/std_data/biblio.json storage/connect/mysql-test/connect/std_data/expense.json storage/connect/mysql-test/connect/std_data/mulexp3.json storage/connect/mysql-test/connect/std_data/mulexp4.json storage/connect/mysql-test/connect/std_data/mulexp5.json storage/connect/mysql-test/connect/t/json_udf.test modified: storage/connect/json.cpp storage/connect/jsonudf.cpp storage/connect/mysql-test/connect/r/json.result storage/connect/mysql-test/connect/t/json.test
1 parent d862d7c commit 5c8862e

File tree

11 files changed

+356
-46
lines changed

11 files changed

+356
-46
lines changed

storage/connect/json.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ JOUTSTR::JOUTSTR(PGLOBAL g) : JOUT(g)
662662

663663
N = 0;
664664
Max = pph->FreeBlk;
665-
Max = (Max > 512) ? Max - 512 : Max;
665+
Max = (Max > 32) ? Max - 32 : Max;
666666
Strp = (char*)PlugSubAlloc(g, NULL, 0); // Size not know yet
667667
} // end of JOUTSTR constructor
668668

storage/connect/jsonudf.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ static PSZ MakeKey(PGLOBAL g, UDF_ARGS *args, int i)
232232
/***********************************************************************/
233233
static PJVAL MakeValue(PGLOBAL g, UDF_ARGS *args, int i)
234234
{
235-
char *sap = args->args[i];
235+
char *sap = (args->arg_count > i) ? args->args[i] : NULL;
236236
PJSON jsp;
237237
PJVAL jvp = new(g) JVALUE;
238238

@@ -362,7 +362,7 @@ my_bool Json_Array_Add_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
362362
strcpy(message, "Json_Value_Add must have at least 2 arguments");
363363
return true;
364364
} else if (!IsJson(args, 0)) {
365-
strcpy(message, "Json_Value_Add first argument must be a json array");
365+
strcpy(message, "Json_Value_Add first argument must be a json item");
366366
return true;
367367
} else
368368
CalcLen(args, false, reslen, memlen);
@@ -561,7 +561,7 @@ my_bool Json_Object_Grp_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
561561
unsigned long reslen, memlen, n = GetJsonGrpSize();
562562

563563
if (args->arg_count != 2) {
564-
strcpy(message, "Json_Array_Grp can only accept 2 argument");
564+
strcpy(message, "Json_Array_Grp can only accept 2 arguments");
565565
return true;
566566
} else
567567
CalcLen(args, true, reslen, memlen);

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

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ TRANSLATION CHAR(32),
1212
TRANSLATOR CHAR(80),
1313
PUBLISHER CHAR(32),
1414
DATEPUB int(4)
15-
) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
15+
) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
1616
SELECT * FROM t1;
1717
ISBN LANG SUBJECT AUTHOR TITLE TRANSLATION TRANSLATOR PUBLISHER DATEPUB
1818
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
@@ -34,7 +34,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
3434
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
3535
Year int(4) FIELD_FORMAT='DATEPUB'
3636
)
37-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
37+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
3838
SELECT * FROM t1;
3939
ISBN Language Subject Authors Title Translation Translator Publisher Location Year
4040
9782212090819 fr applications 2 Construire une application XML Eyrolles Paris 1999
@@ -57,7 +57,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
5757
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
5858
Year int(4) FIELD_FORMAT='DATEPUB'
5959
)
60-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
60+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
6161
SELECT * FROM t1;
6262
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
6363
9782212090819 fr applications Jean-Christophe and Fran�ois Bernadac and Knab Construire une application XML Eyrolles Paris 1999
@@ -80,7 +80,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
8080
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
8181
Year int(4) FIELD_FORMAT='DATEPUB'
8282
)
83-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
83+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
8484
SELECT * FROM t1;
8585
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
8686
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
@@ -97,7 +97,7 @@ ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher L
9797
CREATE TABLE t2 (
9898
FIRSTNAME CHAR(32),
9999
LASTNAME CHAR(32))
100-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn' OPTION_LIST='Object=[2]:AUTHOR';
100+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json' OPTION_LIST='Object=[2]:AUTHOR';
101101
SELECT * FROM t2;
102102
FIRSTNAME LASTNAME
103103
William J. Pardi
@@ -117,7 +117,7 @@ CREATE TABLE t1
117117
(
118118
line char(255)
119119
)
120-
ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='biblio.jsn';
120+
ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='biblio.json';
121121
SELECT * FROM t1;
122122
line
123123
[
@@ -178,7 +178,7 @@ WHO CHAR(12),
178178
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
179179
WHAT CHAR(32) FIELD_FORMAT='WEEK::EXPENSE:["+"]:WHAT',
180180
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK::EXPENSE:[+]:AMOUNT')
181-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
181+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
182182
SELECT * FROM t1;
183183
WHO WEEK WHAT AMOUNT
184184
Joe 3 Beer+Food+Food+Car 69.00
@@ -199,7 +199,7 @@ WHO CHAR(12),
199199
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
200200
WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT',
201201
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT')
202-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
202+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
203203
SELECT * FROM t1;
204204
WHO WEEK WHAT AMOUNT
205205
Joe 3 Beer 18.00
@@ -228,14 +228,34 @@ Janet 5 Beer 19.00
228228
Janet 5 Food 12.00
229229
DROP TABLE t1;
230230
#
231+
# A table showing many calculated results
232+
#
233+
CREATE TABLE t1 (
234+
WHO CHAR(12) NOT NULL,
235+
WEEKS CHAR(12) NOT NULL FIELD_FORMAT='WEEK:[", "]:NUMBER',
236+
SUMS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[+]:AMOUNT',
237+
SUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[+]:AMOUNT',
238+
AVGS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[!]:AMOUNT',
239+
SUMAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[!]:AMOUNT',
240+
AVGSUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[+]:AMOUNT',
241+
AVGAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[!]:AMOUNT',
242+
AVERAGE DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[X]:AMOUNT')
243+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
244+
SELECT * FROM t1;
245+
WHO WEEKS SUMS SUM AVGS SUMAVG AVGSUM AVGAVG AVERAGE
246+
Joe 3, 4, 5 69.00+83.00+26.00 178.00 17.25+16.60+13.00 46.85 59.33 15.62 16.18
247+
Beth 3, 4, 5 16.00+32.00+32.00 80.00 16.00+16.00+16.00 48.00 26.67 16.00 16.00
248+
Janet 3, 4, 5 55.00+17.00+57.00 129.00 18.33+17.00+14.25 49.58 43.00 16.53 16.12
249+
DROP TABLE t1;
250+
#
231251
# Expand expense in 3 one week tables
232252
#
233253
CREATE TABLE t2 (
234254
WHO CHAR(12),
235255
WEEK INT(2) FIELD_FORMAT='WEEK:[1]:NUMBER',
236256
WHAT CHAR(32) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:WHAT',
237257
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:AMOUNT')
238-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
258+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
239259
SELECT * FROM t2;
240260
WHO WEEK WHAT AMOUNT
241261
Joe 3 Beer 18.00
@@ -251,7 +271,7 @@ WHO CHAR(12),
251271
WEEK INT(2) FIELD_FORMAT='WEEK:[2]:NUMBER',
252272
WHAT CHAR(32) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:WHAT',
253273
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:AMOUNT')
254-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
274+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
255275
SELECT * FROM t3;
256276
WHO WEEK WHAT AMOUNT
257277
Joe 4 Beer 19.00
@@ -267,7 +287,7 @@ WHO CHAR(12),
267287
WEEK INT(2) FIELD_FORMAT='WEEK:[3]:NUMBER',
268288
WHAT CHAR(32) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:WHAT',
269289
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:AMOUNT')
270-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn';
290+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
271291
SELECT * FROM t4;
272292
WHO WEEK WHAT AMOUNT
273293
Joe 5 Beer 14.00
@@ -322,7 +342,7 @@ WHO CHAR(12),
322342
WEEK INT(2),
323343
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
324344
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
325-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp3.jsn';
345+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp3.json';
326346
SELECT * FROM t2;
327347
WHO WEEK WHAT AMOUNT
328348
Joe 3 Beer 18.00
@@ -338,7 +358,7 @@ WHO CHAR(12),
338358
WEEK INT(2),
339359
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
340360
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
341-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp4.jsn';
361+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp4.json';
342362
SELECT * FROM t3;
343363
WHO WEEK WHAT AMOUNT
344364
Joe 4 Beer 19.00
@@ -354,7 +374,7 @@ WHO CHAR(12),
354374
WEEK INT(2),
355375
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
356376
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
357-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp5.jsn';
377+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp5.json';
358378
SELECT * FROM t4;
359379
WHO WEEK WHAT AMOUNT
360380
Joe 5 Beer 14.00
@@ -373,7 +393,7 @@ WHO CHAR(12),
373393
WEEK INT(2),
374394
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
375395
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
376-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp*.jsn' MULTIPLE=1;
396+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp*.json' MULTIPLE=1;
377397
SELECT * FROM t1 ORDER BY WHO, WEEK, WHAT, AMOUNT;
378398
WHO WEEK WHAT AMOUNT
379399
Beth 3 Beer 16.00
@@ -409,7 +429,7 @@ WHO CHAR(12),
409429
WEEK INT(2),
410430
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
411431
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
412-
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp%s.jsn';
432+
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp%s.json';
413433
ALTER TABLE t1
414434
PARTITION BY LIST COLUMNS(WEEK) (
415435
PARTITION `3` VALUES IN(3),

0 commit comments

Comments
 (0)