Commit 48a77e61 authored by Olivier Bertrand's avatar Olivier Bertrand

Make this repository aligned with 10.0 one

parent 464947e6
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.cc text
*.cpp text
*.h text
*.test text
# Declare files that will always have LF line endings on checkout.
*.result text eol=lf
storage/connect/mysql-test/connect/std_data/*.txt text eol=lf
storage/connect/mysql-test/connect/std_data/*.dat text eol=lf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.c diff=cpp *.c diff=cpp
*.h diff=cpp *.h diff=cpp
*.cc diff=cpp *.cc diff=cpp
......
...@@ -2173,12 +2173,12 @@ int ha_connect::CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf) ...@@ -2173,12 +2173,12 @@ int ha_connect::CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf)
/***********************************************************************/ /***********************************************************************/
/* Return the where clause for remote indexed read. */ /* Return the where clause for remote indexed read. */
/***********************************************************************/ /***********************************************************************/
bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q, bool ha_connect::MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL op, char q,
const void *key, int klen) const void *key, int klen)
{ {
const uchar *ptr; const uchar *ptr;
uint rem, len, stlen; //, prtlen; uint rem, len, stlen; //, prtlen;
bool nq, b= false; bool nq, oom, b= false;
Field *fp; Field *fp;
KEY *kfp; KEY *kfp;
KEY_PART_INFO *kpart; KEY_PART_INFO *kpart;
...@@ -2190,7 +2190,7 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q, ...@@ -2190,7 +2190,7 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
return true; return true;
} // endif key } // endif key
strcat(qry, " WHERE ("); oom= qry->Append(" WHERE (");
kfp= &table->key_info[active_index]; kfp= &table->key_info[active_index];
rem= kfp->user_defined_key_parts, rem= kfp->user_defined_key_parts,
len= klen, len= klen,
...@@ -2203,24 +2203,26 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q, ...@@ -2203,24 +2203,26 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
nq= fp->str_needs_quotes(); nq= fp->str_needs_quotes();
if (b) if (b)
strcat(qry, " AND "); oom|= qry->Append(" AND ");
else else
b= true; b= true;
strcat(strncat(strcat(qry, q), fp->field_name, strlen(fp->field_name)), q); oom|= qry->Append(q);
oom|= qry->Append((PSZ)fp->field_name);
oom|= qry->Append(q);
switch (op) { switch (op) {
case OP_EQ: case OP_EQ:
case OP_GT: case OP_GT:
case OP_GE: case OP_GE:
strcat(qry, GetValStr(op, false)); oom|= qry->Append((PSZ)GetValStr(op, false));
break; break;
default: default:
strcat(qry, " ??? "); oom|= qry->Append(" ??? ");
} // endwitch op } // endwitch op
if (nq) if (nq)
strcat(qry, "'"); oom|= qry->Append('\'');
if (kpart->key_part_flag & HA_VAR_LENGTH_PART) { if (kpart->key_part_flag & HA_VAR_LENGTH_PART) {
String varchar; String varchar;
...@@ -2228,17 +2230,17 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q, ...@@ -2228,17 +2230,17 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
varchar.set_quick((char*) ptr+HA_KEY_BLOB_LENGTH, varchar.set_quick((char*) ptr+HA_KEY_BLOB_LENGTH,
var_length, &my_charset_bin); var_length, &my_charset_bin);
strncat(qry, varchar.ptr(), varchar.length()); oom|= qry->Append(varchar.ptr(), varchar.length());
} else { } else {
char strbuff[MAX_FIELD_WIDTH]; char strbuff[MAX_FIELD_WIDTH];
String str(strbuff, sizeof(strbuff), kpart->field->charset()), *res; String str(strbuff, sizeof(strbuff), kpart->field->charset()), *res;
res= fp->val_str(&str, ptr); res= fp->val_str(&str, ptr);
strncat(qry, res->ptr(), res->length()); oom|= qry->Append(res->ptr(), res->length());
} // endif flag } // endif flag
if (nq) if (nq)
strcat(qry, "'"); oom|= qry->Append('\'');
if (stlen >= len) if (stlen >= len)
break; break;
...@@ -2251,8 +2253,10 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q, ...@@ -2251,8 +2253,10 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
ptr+= stlen - MY_TEST(kpart->null_bit); ptr+= stlen - MY_TEST(kpart->null_bit);
} // endfor kpart } // endfor kpart
strcat(qry, ")"); if ((oom|= qry->Append(")")))
return false; strcpy(g->Message, "Out of memory");
return oom;
} // end of MakeKeyWhere } // end of MakeKeyWhere
...@@ -2714,7 +2718,12 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond) ...@@ -2714,7 +2718,12 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
if (tty == TYPE_AM_ODBC) { if (tty == TYPE_AM_ODBC) {
strcat(body, "{ts '"); strcat(body, "{ts '");
strcat(strncat(body, res->ptr(), res->length()), "'}"); strncat(body, res->ptr(), res->length());
if (res->length() < 19)
strcat(body, "1970-01-01 00:00:00" + res->length());
strcat(body, "'}");
break; break;
} // endif ODBC } // endif ODBC
...@@ -2739,6 +2748,10 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond) ...@@ -2739,6 +2748,10 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
strcat(body, "{ts '"); strcat(body, "{ts '");
strncat(body, res->ptr(), res->length()); strncat(body, res->ptr(), res->length());
if (res->length() < 19)
strcat(body, "1970-01-01 00:00:00" + res->length());
strcat(body, "'}"); strcat(body, "'}");
break; break;
case MYSQL_TYPE_DATE: case MYSQL_TYPE_DATE:
...@@ -4134,6 +4147,10 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd, ...@@ -4134,6 +4147,10 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
break; break;
// } // endif partitioned // } // endif partitioned
case SQLCOM_END:
// Met in procedures: IF(EXISTS(SELECT...
newmode= MODE_READ;
break;
default: default:
htrc("Unsupported sql_command=%d\n", thd_sql_command(thd)); htrc("Unsupported sql_command=%d\n", thd_sql_command(thd));
strcpy(g->Message, "CONNECT Unsupported command"); strcpy(g->Message, "CONNECT Unsupported command");
......
...@@ -235,7 +235,7 @@ public: ...@@ -235,7 +235,7 @@ public:
int CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf); int CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf);
int ReadIndexed(uchar *buf, OPVAL op, const uchar* key= NULL, int ReadIndexed(uchar *buf, OPVAL op, const uchar* key= NULL,
uint key_len= 0); uint key_len= 0);
bool MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q, bool MakeKeyWhere(PGLOBAL g, PSTRG qry, OPVAL op, char q,
const void *key, int klen); const void *key, int klen);
inline char *Strz(LEX_STRING &ls); inline char *Strz(LEX_STRING &ls);
......
...@@ -12,7 +12,7 @@ TRANSLATION CHAR(32), ...@@ -12,7 +12,7 @@ TRANSLATION CHAR(32),
TRANSLATOR CHAR(80), TRANSLATOR CHAR(80),
PUBLISHER CHAR(32), PUBLISHER CHAR(32),
DATEPUB int(4) DATEPUB int(4)
) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn'; ) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
SELECT * FROM t1; SELECT * FROM t1;
ISBN LANG SUBJECT AUTHOR TITLE TRANSLATION TRANSLATOR PUBLISHER DATEPUB ISBN LANG SUBJECT AUTHOR TITLE TRANSLATION TRANSLATOR PUBLISHER DATEPUB
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
...@@ -34,7 +34,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', ...@@ -34,7 +34,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
Year int(4) FIELD_FORMAT='DATEPUB' Year int(4) FIELD_FORMAT='DATEPUB'
) )
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
SELECT * FROM t1; SELECT * FROM t1;
ISBN Language Subject Authors Title Translation Translator Publisher Location Year ISBN Language Subject Authors Title Translation Translator Publisher Location Year
9782212090819 fr applications 2 Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications 2 Construire une application XML Eyrolles Paris 1999
...@@ -57,7 +57,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', ...@@ -57,7 +57,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
Year int(4) FIELD_FORMAT='DATEPUB' Year int(4) FIELD_FORMAT='DATEPUB'
) )
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
SELECT * FROM t1; SELECT * FROM t1;
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
9782212090819 fr applications Jean-Christophe and Franois Bernadac and Knab Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Jean-Christophe and Franois Bernadac and Knab Construire une application XML Eyrolles Paris 1999
...@@ -80,7 +80,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME', ...@@ -80,7 +80,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE', Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
Year int(4) FIELD_FORMAT='DATEPUB' Year int(4) FIELD_FORMAT='DATEPUB'
) )
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json';
SELECT * FROM t1; SELECT * FROM t1;
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
...@@ -89,23 +89,23 @@ ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher L ...@@ -89,23 +89,23 @@ ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher L
UPDATE t1 SET AuthorFN = 'Philippe' WHERE AuthorLN = 'Knab'; UPDATE t1 SET AuthorFN = 'Philippe' WHERE AuthorLN = 'Knab';
SELECT * FROM t1 WHERE ISBN = '9782212090819'; SELECT * FROM t1 WHERE ISBN = '9782212090819';
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Philippe Bernadac Construire une application XML Eyrolles Paris 1999
9782212090819 fr applications Philippe Knab Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Franois Knab Construire une application XML Eyrolles Paris 1999
# #
# To add an author a new table must be created # To add an author a new table must be created
# #
CREATE TABLE t2 ( CREATE TABLE t2 (
FIRSTNAME CHAR(32), FIRSTNAME CHAR(32),
LASTNAME CHAR(32)) LASTNAME CHAR(32))
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn' OPTION_LIST='Object=[2]:AUTHOR'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.json' OPTION_LIST='Object=[2]:AUTHOR';
SELECT * FROM t2; SELECT * FROM t2;
FIRSTNAME LASTNAME FIRSTNAME LASTNAME
William J. Pardi William J. Pardi
INSERT INTO t2 VALUES('Charles','Dickens'); INSERT INTO t2 VALUES('Charles','Dickens');
SELECT * FROM t1; SELECT * FROM t1;
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Philippe Bernadac Construire une application XML Eyrolles Paris 1999
9782212090819 fr applications Philippe Knab Construire une application XML Eyrolles Paris 1999 9782212090819 fr applications Franois Knab Construire une application XML Eyrolles Paris 1999
9782840825685 fr applications William J. Pardi XML en Action adapt de l'anglais par James Guerin Microsoft Press Paris 1999 9782840825685 fr applications William J. Pardi XML en Action adapt de l'anglais par James Guerin Microsoft Press Paris 1999
9782840825685 fr applications Charles Dickens XML en Action adapt de l'anglais par James Guerin Microsoft Press Paris 1999 9782840825685 fr applications Charles Dickens XML en Action adapt de l'anglais par James Guerin Microsoft Press Paris 1999
DROP TABLE t1; DROP TABLE t1;
...@@ -117,7 +117,7 @@ CREATE TABLE t1 ...@@ -117,7 +117,7 @@ CREATE TABLE t1
( (
line char(255) line char(255)
) )
ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='biblio.jsn'; ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='biblio.json';
SELECT * FROM t1; SELECT * FROM t1;
line line
[ [
...@@ -127,11 +127,11 @@ line ...@@ -127,11 +127,11 @@ line
"SUBJECT": "applications", "SUBJECT": "applications",
"AUTHOR": [ "AUTHOR": [
{ {
"FIRSTNAME": "Jean-Christophe", "FIRSTNAME": "Philippe",
"LASTNAME": "Bernadac" "LASTNAME": "Bernadac"
}, },
{ {
"FIRSTNAME": "Philippe", "FIRSTNAME": "Franois",
"LASTNAME": "Knab" "LASTNAME": "Knab"
} }
], ],
...@@ -178,7 +178,7 @@ WHO CHAR(12), ...@@ -178,7 +178,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER', WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK::EXPENSE:["+"]:WHAT', WHAT CHAR(32) FIELD_FORMAT='WEEK::EXPENSE:["+"]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK::EXPENSE:[+]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK::EXPENSE:[+]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
SELECT * FROM t1; SELECT * FROM t1;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 3 Beer+Food+Food+Car 69.00 Joe 3 Beer+Food+Food+Car 69.00
...@@ -192,16 +192,60 @@ Janet 4 Car 17.00 ...@@ -192,16 +192,60 @@ Janet 4 Car 17.00
Janet 5 Beer+Car+Beer+Food 57.00 Janet 5 Beer+Car+Beer+Food 57.00
DROP TABLE t1; DROP TABLE t1;
# #
# Cannot be fully expanded # Now it can be fully expanded
# #
CREATE TABLE t1 ( CREATE TABLE t1 (
WHO CHAR(12), WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER', WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
SELECT * FROM t1;
WHO WEEK WHAT AMOUNT
Joe 3 Beer 18.00
Joe 3 Food 12.00
Joe 3 Food 19.00
Joe 3 Car 20.00
Joe 4 Beer 19.00
Joe 4 Beer 16.00
Joe 4 Food 17.00
Joe 4 Food 17.00
Joe 4 Beer 14.00
Joe 5 Beer 14.00
Joe 5 Food 12.00
Beth 3 Beer 16.00
Beth 4 Food 17.00
Beth 4 Beer 15.00
Beth 5 Food 12.00
Beth 5 Beer 20.00
Janet 3 Car 19.00
Janet 3 Food 18.00
Janet 3 Beer 18.00
Janet 4 Car 17.00
Janet 5 Beer 14.00
Janet 5 Car 12.00
Janet 5 Beer 19.00
Janet 5 Food 12.00
DROP TABLE t1;
#
# A table showing many calculated results
#
CREATE TABLE t1 (
WHO CHAR(12) NOT NULL,
WEEKS CHAR(12) NOT NULL FIELD_FORMAT='WEEK:[", "]:NUMBER',
SUMS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[+]:AMOUNT',
SUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[+]:AMOUNT',
AVGS CHAR(64) NOT NULL FIELD_FORMAT='WEEK:["+"]:EXPENSE:[!]:AMOUNT',
SUMAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[+]:EXPENSE:[!]:AMOUNT',
AVGSUM DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[+]:AMOUNT',
AVGAVG DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[!]:AMOUNT',
AVERAGE DOUBLE(8,2) NOT NULL FIELD_FORMAT='WEEK:[!]:EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
SELECT * FROM t1; SELECT * FROM t1;
ERROR HY000: Got error 174 'Cannot expand more than one array' from CONNECT WHO WEEKS SUMS SUM AVGS SUMAVG AVGSUM AVGAVG AVERAGE
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
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
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
DROP TABLE t1; DROP TABLE t1;
# #
# Expand expense in 3 one week tables # Expand expense in 3 one week tables
...@@ -211,7 +255,7 @@ WHO CHAR(12), ...@@ -211,7 +255,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[1]:NUMBER', WEEK INT(2) FIELD_FORMAT='WEEK:[1]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
SELECT * FROM t2; SELECT * FROM t2;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 3 Beer 18.00 Joe 3 Beer 18.00
...@@ -227,7 +271,7 @@ WHO CHAR(12), ...@@ -227,7 +271,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[2]:NUMBER', WEEK INT(2) FIELD_FORMAT='WEEK:[2]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
SELECT * FROM t3; SELECT * FROM t3;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 4 Beer 19.00 Joe 4 Beer 19.00
...@@ -243,7 +287,7 @@ WHO CHAR(12), ...@@ -243,7 +287,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[3]:NUMBER', WEEK INT(2) FIELD_FORMAT='WEEK:[3]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='expense.json';
SELECT * FROM t4; SELECT * FROM t4;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 5 Beer 14.00 Joe 5 Beer 14.00
...@@ -298,7 +342,7 @@ WHO CHAR(12), ...@@ -298,7 +342,7 @@ WHO CHAR(12),
WEEK INT(2), WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp3.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp3.json';
SELECT * FROM t2; SELECT * FROM t2;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 3 Beer 18.00 Joe 3 Beer 18.00
...@@ -314,7 +358,7 @@ WHO CHAR(12), ...@@ -314,7 +358,7 @@ WHO CHAR(12),
WEEK INT(2), WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp4.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp4.json';
SELECT * FROM t3; SELECT * FROM t3;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 4 Beer 19.00 Joe 4 Beer 19.00
...@@ -330,7 +374,7 @@ WHO CHAR(12), ...@@ -330,7 +374,7 @@ WHO CHAR(12),
WEEK INT(2), WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp5.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp5.json';
SELECT * FROM t4; SELECT * FROM t4;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Joe 5 Beer 14.00 Joe 5 Beer 14.00
...@@ -349,7 +393,7 @@ WHO CHAR(12), ...@@ -349,7 +393,7 @@ WHO CHAR(12),
WEEK INT(2), WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp*.jsn' MULTIPLE=1; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp*.json' MULTIPLE=1;
SELECT * FROM t1 ORDER BY WHO, WEEK, WHAT, AMOUNT; SELECT * FROM t1 ORDER BY WHO, WEEK, WHAT, AMOUNT;
WHO WEEK WHAT AMOUNT WHO WEEK WHAT AMOUNT
Beth 3 Beer 16.00 Beth 3 Beer 16.00
...@@ -385,7 +429,7 @@ WHO CHAR(12), ...@@ -385,7 +429,7 @@ WHO CHAR(12),
WEEK INT(2), WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT', WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT') AMOUNT DOUBLE(8,2) FIELD_FORMAT='EXPENSE:[X]:AMOUNT')
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp%s.jsn'; ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='mulexp%s.json';
ALTER TABLE t1 ALTER TABLE t1
PARTITION BY LIST COLUMNS(WEEK) ( PARTITION BY LIST COLUMNS(WEEK) (
PARTITION `3` VALUES IN(3), PARTITION `3` VALUES IN(3),
......
This diff is collapsed.
...@@ -126,7 +126,7 @@ TABNAME='T1'; ...@@ -126,7 +126,7 @@ TABNAME='T1';
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`A` decimal(38,0) DEFAULT NULL, `A` decimal(40,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL `B` double(40,0) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEngineOracle;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='T1' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEngineOracle;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='T1'
SELECT * FROM t1 ORDER BY A; SELECT * FROM t1 ORDER BY A;
...@@ -138,7 +138,7 @@ CREATE TABLE t2 AS SELECT * FROM t1; ...@@ -138,7 +138,7 @@ CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2; SHOW CREATE TABLE t2;
Table Create Table Table Create Table
t2 CREATE TABLE `t2` ( t2 CREATE TABLE `t2` (
`A` decimal(38,0) DEFAULT NULL, `A` decimal(40,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL `B` double(40,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2; SELECT * FROM t2;
...@@ -162,7 +162,7 @@ TABNAME='MTR.T1'; ...@@ -162,7 +162,7 @@ TABNAME='MTR.T1';
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`A` decimal(38,0) DEFAULT NULL, `A` decimal(40,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL `B` double(40,0) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEngineOracle;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='MTR.T1' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEngineOracle;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='MTR.T1'
SELECT * FROM t1; SELECT * FROM t1;
...@@ -178,7 +178,7 @@ TABNAME='MTR.V1'; ...@@ -178,7 +178,7 @@ TABNAME='MTR.V1';
SHOW CREATE TABLE t1; SHOW CREATE TABLE t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`A` decimal(38,0) DEFAULT NULL, `A` decimal(40,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL `B` double(40,0) DEFAULT NULL
) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEngineOracle;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='MTR.V1' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 CONNECTION='DSN=ConnectEngineOracle;UID=mtr;PWD=mtr' `TABLE_TYPE`='ODBC' `TABNAME`='MTR.V1'
SELECT * FROM t1; SELECT * FROM t1;
...@@ -190,7 +190,7 @@ CREATE TABLE t2 AS SELECT * FROM t1; ...@@ -190,7 +190,7 @@ CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2; SHOW CREATE TABLE t2;
Table Create Table Table Create Table
t2 CREATE TABLE `t2` ( t2 CREATE TABLE `t2` (
`A` decimal(38,0) DEFAULT NULL, `A` decimal(40,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL `B` double(40,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2; SELECT * FROM t2;
......
[ [
{ {
"ISBN": "9782212090819", "ISBN": "9782212090819",
"LANG": "fr", "LANG": "fr",
"SUBJECT": "applications", "SUBJECT": "applications",
"AUTHOR": [ "AUTHOR": [
{ {
"FIRSTNAME": "Jean-Christophe", "FIRSTNAME": "Jean-Christophe",
"LASTNAME": "Bernadac" "LASTNAME": "Bernadac"
}, },
{ {
"FIRSTNAME": "François", "FIRSTNAME": "François",
"LASTNAME": "Knab" "LASTNAME": "Knab"
} }
], ],
"TITLE": "Construire une application XML", "TITLE": "Construire une application XML",
"PUBLISHER": { "PUBLISHER": {
"NAME": "Eyrolles", "NAME": "Eyrolles",
"PLACE": "Paris" "PLACE": "Paris"
}, },
"DATEPUB": 1999 "DATEPUB": 1999
}, },
{ {
"ISBN": "9782840825685", "ISBN": "9782840825685",
"LANG": "fr", "LANG": "fr",
"SUBJECT": "applications", "SUBJECT": "applications",
"AUTHOR": [ "AUTHOR": [
{ {
"FIRSTNAME": "William J.", "FIRSTNAME": "William J.",
"LASTNAME": "Pardi" "LASTNAME": "Pardi"
} }
], ],
"TITLE": "XML en Action", "TITLE": "XML en Action",
"TRANSLATION": "adapté de l'anglais par", "TRANSLATION": "adapté de l'anglais par",
"TRANSLATOR": { "TRANSLATOR": {
"FIRSTNAME": "James", "FIRSTNAME": "James",
"LASTNAME": "Guerin" "LASTNAME": "Guerin"
}, },
"PUBLISHER": { "PUBLISHER": {
"NAME": "Microsoft Press", "NAME": "Microsoft Press",
"PLACE": "Paris" "PLACE": "Paris"
}, },
"DATEPUB": 1999 "DATEPUB": 1999
} }
] ]
[ [
{ {
"WHO": "Joe", "WHO": "Joe",
"WEEK": [ "WEEK": [
{ {
"NUMBER": 3, "NUMBER": 3,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 18.00 "AMOUNT": 18.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 20.00 "AMOUNT": 20.00
} }
] ]
}, },
{ {
"NUMBER": 4, "NUMBER": 4,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 16.00 "AMOUNT": 16.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 17.00 "AMOUNT": 17.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 17.00 "AMOUNT": 17.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 14.00 "AMOUNT": 14.00
} }
] ]
}, },
{ {
"NUMBER": 5, "NUMBER": 5,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 14.00 "AMOUNT": 14.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
} }
] ]
} }
] ]
}, },
{ {
"WHO": "Beth", "WHO": "Beth",
"WEEK": [ "WEEK": [
{ {
"NUMBER": 3, "NUMBER": 3,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 16.00 "AMOUNT": 16.00
} }
] ]
}, },
{ {
"NUMBER": 4, "NUMBER": 4,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 17.00 "AMOUNT": 17.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 15.00 "AMOUNT": 15.00
} }
] ]
}, },
{ {
"NUMBER": 5, "NUMBER": 5,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 20.00 "AMOUNT": 20.00
} }
] ]
} }
] ]
}, },
{ {
"WHO": "Janet", "WHO": "Janet",
"WEEK": [ "WEEK": [
{ {
"NUMBER": 3, "NUMBER": 3,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 18.00 "AMOUNT": 18.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 18.00 "AMOUNT": 18.00
} }
] ]
}, },
{ {
"NUMBER": 4, "NUMBER": 4,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 17.00 "AMOUNT": 17.00
} }
] ]
}, },
{ {
"NUMBER": 5, "NUMBER": 5,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 14.00 "AMOUNT": 14.00
}, },
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 12.00 "AMOUNT": 12.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
} }
] ]
} }
] ]
} }
] ]
[ [
{ {
"WHO": "Joe", "WHO": "Joe",
"WEEK": 3, "WEEK": 3,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 18.00 "AMOUNT": 18.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 20.00 "AMOUNT": 20.00
} }
] ]
}, },
{ {
"WHO": "Beth", "WHO": "Beth",
"WEEK": 3, "WEEK": 3,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 16.00 "AMOUNT": 16.00
} }
] ]
}, },
{ {
"WHO": "Janet", "WHO": "Janet",
"WEEK": 3, "WEEK": 3,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 18.00 "AMOUNT": 18.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 18.00 "AMOUNT": 18.00
} }
] ]
} }
] ]
[ [
{ {
"WHO": "Joe", "WHO": "Joe",
"WEEK": 4, "WEEK": 4,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 16.00 "AMOUNT": 16.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 17.00 "AMOUNT": 17.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 17.00 "AMOUNT": 17.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 14.00 "AMOUNT": 14.00
} }
] ]
}, },
{ {
"WHO": "Beth", "WHO": "Beth",
"WEEK": 4, "WEEK": 4,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 17.00 "AMOUNT": 17.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 15.00 "AMOUNT": 15.00
} }
] ]
}, },
{ {
"WHO": "Janet", "WHO": "Janet",
"WEEK": 4, "WEEK": 4,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 17.00 "AMOUNT": 17.00
} }
] ]
} }
] ]
[ [
{ {
"WHO": "Joe", "WHO": "Joe",
"WEEK": 5, "WEEK": 5,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 14.00 "AMOUNT": 14.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
} }
] ]
}, },
{ {
"WHO": "Beth", "WHO": "Beth",
"WEEK": 5, "WEEK": 5,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 20.00 "AMOUNT": 20.00
} }
] ]
}, },
{ {
"WHO": "Janet", "WHO": "Janet",
"WEEK": 5, "WEEK": 5,
"EXPENSE": [ "EXPENSE": [
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 14.00 "AMOUNT": 14.00
}, },
{ {
"WHAT": "Car", "WHAT": "Car",
"AMOUNT": 12.00 "AMOUNT": 12.00
}, },
{ {
"WHAT": "Beer", "WHAT": "Beer",
"AMOUNT": 19.00 "AMOUNT": 19.00
}, },
{ {
"WHAT": "Food", "WHAT": "Food",
"AMOUNT": 12.00 "AMOUNT": 12.00
} }
] ]
} }
] ]
...@@ -238,7 +238,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g) ...@@ -238,7 +238,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g)
continue; // Not a match continue; // Not a match
strcat(strcpy(filename, direc), entry->d_name); strcat(strcpy(filename, direc), entry->d_name);
pfn[n] = PlugDup(g, filename); pfn[n++] = PlugDup(g, filename);
if (trace) if (trace)
htrc("Adding pfn[%d] %s\n", n, filename); htrc("Adding pfn[%d] %s\n", n, filename);
......
...@@ -1078,8 +1078,7 @@ bool TDBMYSQL::ReadKey(PGLOBAL g, OPVAL op, const void *key, int len) ...@@ -1078,8 +1078,7 @@ bool TDBMYSQL::ReadKey(PGLOBAL g, OPVAL op, const void *key, int len)
if (Myc.m_Res) if (Myc.m_Res)
Myc.FreeResult(); Myc.FreeResult();
To_Def->GetHandler()->MakeKeyWhere(g, Query->GetStr(), To_Def->GetHandler()->MakeKeyWhere(g, Query, op, '`', key, len);
op, "`", key, len);
if (To_CondFil) { if (To_CondFil) {
oom = Query->Append(" AND ("); oom = Query->Append(" AND (");
......
...@@ -627,13 +627,16 @@ int TYPVAL<double>::GetValLen(void) ...@@ -627,13 +627,16 @@ int TYPVAL<double>::GetValLen(void)
template <class TYPE> template <class TYPE>
bool TYPVAL<TYPE>::SetValue_pval(PVAL valp, bool chktype) bool TYPVAL<TYPE>::SetValue_pval(PVAL valp, bool chktype)
{ {
if (chktype && Type != valp->GetType()) if (valp != this) {
return true; if (chktype && Type != valp->GetType())
return true;
if (!(Null = valp->IsNull() && Nullable)) if (!(Null = valp->IsNull() && Nullable))
Tval = GetTypedValue(valp); Tval = GetTypedValue(valp);
else else
Reset(); Reset();
} // endif valp
return false; return false;
} // end of SetValue } // end of SetValue
...@@ -1319,15 +1322,18 @@ ulonglong TYPVAL<PSZ>::GetUBigintValue(void) ...@@ -1319,15 +1322,18 @@ ulonglong TYPVAL<PSZ>::GetUBigintValue(void)
/***********************************************************************/ /***********************************************************************/
bool TYPVAL<PSZ>::SetValue_pval(PVAL valp, bool chktype) bool TYPVAL<PSZ>::SetValue_pval(PVAL valp, bool chktype)
{ {
if (chktype && (valp->GetType() != Type || valp->GetSize() > Len)) if (valp != this) {
return true; if (chktype && (valp->GetType() != Type || valp->GetSize() > Len))
return true;
char buf[64]; char buf[64];
if (!(Null = valp->IsNull() && Nullable)) if (!(Null = valp->IsNull() && Nullable))
strncpy(Strp, valp->GetCharString(buf), Len); strncpy(Strp, valp->GetCharString(buf), Len);
else else
Reset(); Reset();
} // endif valp
return false; return false;
} // end of SetValue_pval } // end of SetValue_pval
...@@ -2063,18 +2069,21 @@ double BINVAL::GetFloatValue(void) ...@@ -2063,18 +2069,21 @@ double BINVAL::GetFloatValue(void)
/***********************************************************************/ /***********************************************************************/
bool BINVAL::SetValue_pval(PVAL valp, bool chktype) bool BINVAL::SetValue_pval(PVAL valp, bool chktype)
{ {
if (chktype && (valp->GetType() != Type || valp->GetSize() > Clen))
return true;
bool rc = false; bool rc = false;
if (!(Null = valp->IsNull() && Nullable)) { if (valp != this) {
if ((rc = (Len = valp->GetSize()) > Clen)) if (chktype && (valp->GetType() != Type || valp->GetSize() > Clen))
Len = Clen; return true;
memcpy(Binp, valp->GetTo_Val(), Len); if (!(Null = valp->IsNull() && Nullable)) {
} else if ((rc = (Len = valp->GetSize()) > Clen))
Reset(); Len = Clen;
memcpy(Binp, valp->GetTo_Val(), Len);
} else
Reset();
} // endif valp
return rc; return rc;
} // end of SetValue_pval } // end of SetValue_pval
...@@ -2629,21 +2638,24 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval) ...@@ -2629,21 +2638,24 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
/***********************************************************************/ /***********************************************************************/
bool DTVAL::SetValue_pval(PVAL valp, bool chktype) bool DTVAL::SetValue_pval(PVAL valp, bool chktype)
{ {
if (chktype && Type != valp->GetType()) if (valp != this) {
return true; if (chktype && Type != valp->GetType())
return true;
if (!(Null = valp->IsNull() && Nullable)) { if (!(Null = valp->IsNull() && Nullable)) {
if (Pdtp && !valp->IsTypeNum()) { if (Pdtp && !valp->IsTypeNum()) {
int ndv; int ndv;
int dval[6]; int dval[6];
ndv = ExtractDate(valp->GetCharValue(), Pdtp, DefYear, dval);
MakeDate(NULL, dval, ndv);
} else
Tval = valp->GetIntValue();
ndv = ExtractDate(valp->GetCharValue(), Pdtp, DefYear, dval);
MakeDate(NULL, dval, ndv);
} else } else
Tval = valp->GetIntValue(); Reset();
} else } // endif valp
Reset();
return false; return false;
} // end of SetValue } // end of SetValue
......
...@@ -289,6 +289,34 @@ bool STRING::Set(char *s, uint n) ...@@ -289,6 +289,34 @@ bool STRING::Set(char *s, uint n)
return false; return false;
} // end of Set } // end of Set
/***********************************************************************/
/* Append a char* to a STRING. */
/***********************************************************************/
bool STRING::Append(const char *s, uint ln)
{
if (!s)
return false;
uint len = Length + ln + 1;
if (len > Size) {
char *p = Realloc(len);
if (!p)
return true;
else if (p != Strp) {
strcpy(p, Strp);
Strp = p;
} // endif p
} // endif n
strncpy(Strp + Length, s, ln);
Length = len - 1;
Strp[Length] = 0;
return false;
} // end of Append
/***********************************************************************/ /***********************************************************************/
/* Append a PSZ to a STRING. */ /* Append a PSZ to a STRING. */
/***********************************************************************/ /***********************************************************************/
......
...@@ -134,6 +134,7 @@ class DllExport STRING : public BLOCK { ...@@ -134,6 +134,7 @@ class DllExport STRING : public BLOCK {
inline void Reset(void) {*Strp = 0;} inline void Reset(void) {*Strp = 0;}
bool Set(PSZ s); bool Set(PSZ s);
bool Set(char *s, uint n); bool Set(char *s, uint n);
bool Append(const char *s, uint ln);
bool Append(PSZ s); bool Append(PSZ s);
bool Append(STRING &str); bool Append(STRING &str);
bool Append(char c); bool Append(char c);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment