Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
48a77e61
Commit
48a77e61
authored
Apr 05, 2015
by
Olivier Bertrand
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make this repository aligned with 10.0 one
parent
464947e6
Changes
17
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
992 additions
and
687 deletions
+992
-687
.gitattributes
.gitattributes
+20
-0
storage/connect/ha_connect.cc
storage/connect/ha_connect.cc
+31
-14
storage/connect/ha_connect.h
storage/connect/ha_connect.h
+1
-1
storage/connect/mysql-test/connect/r/json.result
storage/connect/mysql-test/connect/r/json.result
+68
-24
storage/connect/mysql-test/connect/r/json_udf.result
storage/connect/mysql-test/connect/r/json_udf.result
+167
-0
storage/connect/mysql-test/connect/r/odbc_oracle.result
storage/connect/mysql-test/connect/r/odbc_oracle.result
+5
-5
storage/connect/mysql-test/connect/std_data/biblio.json
storage/connect/mysql-test/connect/std_data/biblio.json
+45
-45
storage/connect/mysql-test/connect/std_data/expense.json
storage/connect/mysql-test/connect/std_data/expense.json
+158
-158
storage/connect/mysql-test/connect/std_data/mulexp3.json
storage/connect/mysql-test/connect/std_data/mulexp3.json
+52
-52
storage/connect/mysql-test/connect/std_data/mulexp4.json
storage/connect/mysql-test/connect/std_data/mulexp4.json
+52
-52
storage/connect/mysql-test/connect/std_data/mulexp5.json
storage/connect/mysql-test/connect/std_data/mulexp5.json
+52
-52
storage/connect/mysql-test/connect/t/json.test
storage/connect/mysql-test/connect/t/json.test
+264
-247
storage/connect/tabmul.cpp
storage/connect/tabmul.cpp
+1
-1
storage/connect/tabmysql.cpp
storage/connect/tabmysql.cpp
+1
-2
storage/connect/value.cpp
storage/connect/value.cpp
+46
-34
storage/connect/xobject.cpp
storage/connect/xobject.cpp
+28
-0
storage/connect/xobject.h
storage/connect/xobject.h
+1
-0
No files found.
.gitattributes
View file @
48a77e61
# 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
*.h diff=cpp
*.cc diff=cpp
...
...
storage/connect/ha_connect.cc
View file @
48a77e61
...
...
@@ -2173,12 +2173,12 @@ int ha_connect::CheckRecord(PGLOBAL g, const uchar *oldbuf, uchar *newbuf)
/***********************************************************************/
/* 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
uchar
*
ptr
;
uint
rem
,
len
,
stlen
;
//, prtlen;
bool
nq
,
b
=
false
;
bool
nq
,
oom
,
b
=
false
;
Field
*
fp
;
KEY
*
kfp
;
KEY_PART_INFO
*
kpart
;
...
...
@@ -2190,7 +2190,7 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
return
true
;
}
// endif key
strcat
(
qry
,
" WHERE ("
);
oom
=
qry
->
Append
(
" WHERE ("
);
kfp
=
&
table
->
key_info
[
active_index
];
rem
=
kfp
->
user_defined_key_parts
,
len
=
klen
,
...
...
@@ -2203,24 +2203,26 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
nq
=
fp
->
str_needs_quotes
();
if
(
b
)
strcat
(
qry
,
" AND "
);
oom
|=
qry
->
Append
(
" AND "
);
else
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
)
{
case
OP_EQ
:
case
OP_GT
:
case
OP_GE
:
strcat
(
qry
,
GetValStr
(
op
,
false
));
oom
|=
qry
->
Append
((
PSZ
)
GetValStr
(
op
,
false
));
break
;
default:
strcat
(
qry
,
" ??? "
);
oom
|=
qry
->
Append
(
" ??? "
);
}
// endwitch op
if
(
nq
)
strcat
(
qry
,
"'"
);
oom
|=
qry
->
Append
(
'\''
);
if
(
kpart
->
key_part_flag
&
HA_VAR_LENGTH_PART
)
{
String
varchar
;
...
...
@@ -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
,
var_length
,
&
my_charset_bin
);
strncat
(
qry
,
varchar
.
ptr
(),
varchar
.
length
());
oom
|=
qry
->
Append
(
varchar
.
ptr
(),
varchar
.
length
());
}
else
{
char
strbuff
[
MAX_FIELD_WIDTH
];
String
str
(
strbuff
,
sizeof
(
strbuff
),
kpart
->
field
->
charset
()),
*
res
;
res
=
fp
->
val_str
(
&
str
,
ptr
);
strncat
(
qry
,
res
->
ptr
(),
res
->
length
());
oom
|=
qry
->
Append
(
res
->
ptr
(),
res
->
length
());
}
// endif flag
if
(
nq
)
strcat
(
qry
,
"'"
);
oom
|=
qry
->
Append
(
'\''
);
if
(
stlen
>=
len
)
break
;
...
...
@@ -2251,8 +2253,10 @@ bool ha_connect::MakeKeyWhere(PGLOBAL g, char *qry, OPVAL op, char *q,
ptr
+=
stlen
-
MY_TEST
(
kpart
->
null_bit
);
}
// endfor kpart
strcat
(
qry
,
")"
);
return
false
;
if
((
oom
|=
qry
->
Append
(
")"
)))
strcpy
(
g
->
Message
,
"Out of memory"
);
return
oom
;
}
// end of MakeKeyWhere
...
...
@@ -2714,7 +2718,12 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
case
MYSQL_TYPE_DATETIME
:
if
(
tty
==
TYPE_AM_ODBC
)
{
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
;
}
// endif ODBC
...
...
@@ -2739,6 +2748,10 @@ PCFIL ha_connect::CheckCond(PGLOBAL g, PCFIL filp, AMT tty, Item *cond)
case
MYSQL_TYPE_DATETIME
:
strcat
(
body
,
"{ts '"
);
strncat
(
body
,
res
->
ptr
(),
res
->
length
());
if
(
res
->
length
()
<
19
)
strcat
(
body
,
"1970-01-01 00:00:00"
+
res
->
length
());
strcat
(
body
,
"'}"
);
break
;
case
MYSQL_TYPE_DATE
:
...
...
@@ -4134,6 +4147,10 @@ MODE ha_connect::CheckMode(PGLOBAL g, THD *thd,
break
;
// } // endif partitioned
case
SQLCOM_END
:
// Met in procedures: IF(EXISTS(SELECT...
newmode
=
MODE_READ
;
break
;
default:
htrc
(
"Unsupported sql_command=%d
\n
"
,
thd_sql_command
(
thd
));
strcpy
(
g
->
Message
,
"CONNECT Unsupported command"
);
...
...
storage/connect/ha_connect.h
View file @
48a77e61
...
...
@@ -235,7 +235,7 @@ class ha_connect: public handler
int
CheckRecord
(
PGLOBAL
g
,
const
uchar
*
oldbuf
,
uchar
*
newbuf
);
int
ReadIndexed
(
uchar
*
buf
,
OPVAL
op
,
const
uchar
*
key
=
NULL
,
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
);
inline
char
*
Strz
(
LEX_STRING
&
ls
);
...
...
storage/connect/mysql-test/connect/r/json.result
View file @
48a77e61
...
...
@@ -12,7 +12,7 @@ TRANSLATION CHAR(32),
TRANSLATOR CHAR(80),
PUBLISHER CHAR(32),
DATEPUB int(4)
) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
) ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.js
o
n';
SELECT * FROM t1;
ISBN LANG SUBJECT AUTHOR TITLE TRANSLATION TRANSLATOR PUBLISHER DATEPUB
9782212090819 fr applications Jean-Christophe Bernadac Construire une application XML Eyrolles Paris 1999
...
...
@@ -34,7 +34,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
Year int(4) FIELD_FORMAT='DATEPUB'
)
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.js
o
n';
SELECT * FROM t1;
ISBN Language Subject Authors Title Translation Translator Publisher Location Year
9782212090819 fr applications 2 Construire une application XML Eyrolles Paris 1999
...
...
@@ -57,7 +57,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
Year int(4) FIELD_FORMAT='DATEPUB'
)
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.js
o
n';
SELECT * FROM t1;
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
...
...
@@ -80,7 +80,7 @@ Publisher CHAR(20) FIELD_FORMAT='PUBLISHER:NAME',
Location CHAR(16) FIELD_FORMAT='PUBLISHER:PLACE',
Year int(4) FIELD_FORMAT='DATEPUB'
)
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.jsn';
ENGINE=CONNECT TABLE_TYPE=JSON FILE_NAME='biblio.js
o
n';
SELECT * FROM t1;
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
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
UPDATE t1 SET AuthorFN = 'Philippe' WHERE AuthorLN = 'Knab';
SELECT * FROM t1 WHERE ISBN = '9782212090819';
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
9782212090819 fr applications
Jean-Christoph
e Bernadac Construire une application XML Eyrolles Paris 1999
9782212090819 fr applications
Philippe
Knab Construire une application XML Eyrolles Paris 1999
9782212090819 fr applications
Philipp
e Bernadac 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
#
CREATE TABLE t2 (
FIRSTNAME 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.js
o
n' OPTION_LIST='Object=[2]:AUTHOR';
SELECT * FROM t2;
FIRSTNAME LASTNAME
William J. Pardi
INSERT INTO t2 VALUES('Charles','Dickens');
SELECT * FROM t1;
ISBN Language Subject AuthorFN AuthorLN Title Translation Translator Publisher Location Year
9782212090819 fr applications
Jean-Christoph
e Bernadac Construire une application XML Eyrolles Paris 1999
9782212090819 fr applications
Philippe
Knab Construire une application XML Eyrolles Paris 1999
9782212090819 fr applications
Philipp
e Bernadac 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 Charles Dickens XML en Action adapt de l'anglais par James Guerin Microsoft Press Paris 1999
DROP TABLE t1;
...
...
@@ -117,7 +117,7 @@ CREATE TABLE t1
(
line char(255)
)
ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='biblio.jsn';
ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='biblio.js
o
n';
SELECT * FROM t1;
line
[
...
...
@@ -127,11 +127,11 @@ line
"SUBJECT": "applications",
"AUTHOR": [
{
"FIRSTNAME": "
Jean-Christoph
e",
"FIRSTNAME": "
Philipp
e",
"LASTNAME": "Bernadac"
},
{
"FIRSTNAME": "
Philippe
",
"FIRSTNAME": "
Franois
",
"LASTNAME": "Knab"
}
],
...
...
@@ -178,7 +178,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK::EXPENSE:["+"]:WHAT',
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.js
o
n';
SELECT * FROM t1;
WHO WEEK WHAT AMOUNT
Joe 3 Beer+Food+Food+Car 69.00
...
...
@@ -192,16 +192,60 @@ Janet 4 Car 17.00
Janet 5 Beer+Car+Beer+Food 57.00
DROP TABLE t1;
#
#
Cannot
be fully expanded
#
Now it can
be fully expanded
#
CREATE TABLE t1 (
WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[X]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[X]:EXPENSE:[X]:WHAT',
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;
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;
#
# Expand expense in 3 one week tables
...
...
@@ -211,7 +255,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[1]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[1]:EXPENSE:[X]:WHAT',
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.js
o
n';
SELECT * FROM t2;
WHO WEEK WHAT AMOUNT
Joe 3 Beer 18.00
...
...
@@ -227,7 +271,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[2]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[2]:EXPENSE:[X]:WHAT',
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.js
o
n';
SELECT * FROM t3;
WHO WEEK WHAT AMOUNT
Joe 4 Beer 19.00
...
...
@@ -243,7 +287,7 @@ WHO CHAR(12),
WEEK INT(2) FIELD_FORMAT='WEEK:[3]:NUMBER',
WHAT CHAR(32) FIELD_FORMAT='WEEK:[3]:EXPENSE:[X]:WHAT',
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.js
o
n';
SELECT * FROM t4;
WHO WEEK WHAT AMOUNT
Joe 5 Beer 14.00
...
...
@@ -298,7 +342,7 @@ WHO CHAR(12),
WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
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.js
o
n';
SELECT * FROM t2;
WHO WEEK WHAT AMOUNT
Joe 3 Beer 18.00
...
...
@@ -314,7 +358,7 @@ WHO CHAR(12),
WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
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.js
o
n';
SELECT * FROM t3;
WHO WEEK WHAT AMOUNT
Joe 4 Beer 19.00
...
...
@@ -330,7 +374,7 @@ WHO CHAR(12),
WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
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.js
o
n';
SELECT * FROM t4;
WHO WEEK WHAT AMOUNT
Joe 5 Beer 14.00
...
...
@@ -349,7 +393,7 @@ WHO CHAR(12),
WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
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*.js
o
n' MULTIPLE=1;
SELECT * FROM t1 ORDER BY WHO, WEEK, WHAT, AMOUNT;
WHO WEEK WHAT AMOUNT
Beth 3 Beer 16.00
...
...
@@ -385,7 +429,7 @@ WHO CHAR(12),
WEEK INT(2),
WHAT CHAR(32) FIELD_FORMAT='EXPENSE:[X]:WHAT',
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.js
o
n';
ALTER TABLE t1
PARTITION BY LIST COLUMNS(WEEK) (
PARTITION `3` VALUES IN(3),
...
...
storage/connect/mysql-test/connect/r/json_udf.result
0 → 100644
View file @
48a77e61
This diff is collapsed.
Click to expand it.
storage/connect/mysql-test/connect/r/odbc_oracle.result
View file @
48a77e61
...
...
@@ -126,7 +126,7 @@ TABNAME='T1';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`A` decimal(
38
,0) DEFAULT NULL,
`A` decimal(
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'
SELECT * FROM t1 ORDER BY A;
...
...
@@ -138,7 +138,7 @@ CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`A` decimal(
38
,0) DEFAULT NULL,
`A` decimal(
40
,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2;
...
...
@@ -162,7 +162,7 @@ TABNAME='MTR.T1';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`A` decimal(
38
,0) DEFAULT NULL,
`A` decimal(
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'
SELECT * FROM t1;
...
...
@@ -178,7 +178,7 @@ TABNAME='MTR.V1';
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`A` decimal(
38
,0) DEFAULT NULL,
`A` decimal(
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'
SELECT * FROM t1;
...
...
@@ -190,7 +190,7 @@ CREATE TABLE t2 AS SELECT * FROM t1;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`A` decimal(
38
,0) DEFAULT NULL,
`A` decimal(
40
,0) DEFAULT NULL,
`B` double(40,0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM t2;
...
...
storage/connect/mysql-test/connect/std_data/biblio.jsn
→
storage/connect/mysql-test/connect/std_data/biblio.js
o
n
View file @
48a77e61
storage/connect/mysql-test/connect/std_data/expense.jsn
→
storage/connect/mysql-test/connect/std_data/expense.js
o
n
View file @
48a77e61
storage/connect/mysql-test/connect/std_data/mulexp3.jsn
→
storage/connect/mysql-test/connect/std_data/mulexp3.js
o
n
View file @
48a77e61
storage/connect/mysql-test/connect/std_data/mulexp4.jsn
→
storage/connect/mysql-test/connect/std_data/mulexp4.js
o
n
View file @
48a77e61
storage/connect/mysql-test/connect/std_data/mulexp5.jsn
→
storage/connect/mysql-test/connect/std_data/mulexp5.js
o
n
View file @
48a77e61
storage/connect/mysql-test/connect/t/json.test
View file @
48a77e61
...
...
@@ -3,11 +3,11 @@
let
$MYSQLD_DATADIR
=
`select @@datadir`
;
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
biblio
.
js
n
$MYSQLD_DATADIR
/
test
/
biblio
.
jsn
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
expense
.
js
n
$MYSQLD_DATADIR
/
test
/
expense
.
jsn
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
mulexp3
.
js
n
$MYSQLD_DATADIR
/
test
/
mulexp3
.
jsn
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
mulexp4
.
js
n
$MYSQLD_DATADIR
/
test
/
mulexp4
.
jsn
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
mulexp5
.
js
n
$MYSQLD_DATADIR
/
test
/
mulexp5
.
jsn
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
biblio
.
js
on
$MYSQLD_DATADIR
/
test
/
biblio
.
json
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
expense
.
js
on
$MYSQLD_DATADIR
/
test
/
expense
.
json
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
mulexp3
.
js
on
$MYSQLD_DATADIR
/
test
/
mulexp3
.
json
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
mulexp4
.
js
on
$MYSQLD_DATADIR
/
test
/
mulexp4
.
json
--
copy_file
$MTR_SUITE_DIR
/
std_data
/
mulexp5
.
js
on
$MYSQLD_DATADIR
/
test
/
mulexp5
.
json
--
echo
#
--
echo
# Testing doc samples
...
...
@@ -23,7 +23,7 @@ CREATE TABLE t1
TRANSLATOR
CHAR
(
80
),
PUBLISHER
CHAR
(
32
),
DATEPUB
int
(
4
)
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
n'
;
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
on'
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
...
...
@@ -44,7 +44,7 @@ CREATE TABLE t1
Location
CHAR
(
16
)
FIELD_FORMAT
=
'PUBLISHER:PLACE'
,
Year
int
(
4
)
FIELD_FORMAT
=
'DATEPUB'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
on'
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
...
...
@@ -65,7 +65,7 @@ CREATE TABLE t1
Location
CHAR
(
16
)
FIELD_FORMAT
=
'PUBLISHER:PLACE'
,
Year
int
(
4
)
FIELD_FORMAT
=
'DATEPUB'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
on'
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
...
...
@@ -86,7 +86,7 @@ CREATE TABLE t1
Location
CHAR
(
16
)
FIELD_FORMAT
=
'PUBLISHER:PLACE'
,
Year
int
(
4
)
FIELD_FORMAT
=
'DATEPUB'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
on'
;
SELECT
*
FROM
t1
;
UPDATE
t1
SET
AuthorFN
=
'Philippe'
WHERE
AuthorLN
=
'Knab'
;
SELECT
*
FROM
t1
WHERE
ISBN
=
'9782212090819'
;
...
...
@@ -97,7 +97,7 @@ SELECT * FROM t1 WHERE ISBN = '9782212090819';
CREATE
TABLE
t2
(
FIRSTNAME
CHAR
(
32
),
LASTNAME
CHAR
(
32
))
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
n'
OPTION_LIST
=
'Object=[2]:AUTHOR'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'biblio.js
on'
OPTION_LIST
=
'Object=[2]:AUTHOR'
;
SELECT
*
FROM
t2
;
INSERT
INTO
t2
VALUES
(
'Charles'
,
'Dickens'
);
SELECT
*
FROM
t1
;
...
...
@@ -111,7 +111,7 @@ CREATE TABLE t1
(
line
char
(
255
)
)
ENGINE
=
CONNECT
TABLE_TYPE
=
DOS
FILE_NAME
=
'biblio.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
DOS
FILE_NAME
=
'biblio.js
on'
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
...
...
@@ -123,20 +123,37 @@ WHO CHAR(12),
WEEK
INT
(
2
)
FIELD_FORMAT
=
'WEEK:[X]:NUMBER'
,
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'WEEK::EXPENSE:["+"]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'WEEK::EXPENSE:[+]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
on'
;
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
echo
#
--
echo
#
Cannot be fully expanded
--
echo
#
Now it can be fully expanded
--
echo
#
CREATE
TABLE
t1
(
WHO
CHAR
(
12
),
WEEK
INT
(
2
)
FIELD_FORMAT
=
'WEEK:[X]:NUMBER'
,
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'WEEK:[X]:EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'WEEK:[X]:EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.jsn'
;
--
error
ER_GET_ERRMSG
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.json'
;
#--error ER_GET_ERRMSG
SELECT
*
FROM
t1
;
DROP
TABLE
t1
;
--
echo
#
--
echo
# A table showing many calculated results
--
echo
#
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
;
DROP
TABLE
t1
;
...
...
@@ -148,7 +165,7 @@ WHO CHAR(12),
WEEK
INT
(
2
)
FIELD_FORMAT
=
'WEEK:[1]:NUMBER'
,
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'WEEK:[1]:EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'WEEK:[1]:EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
on'
;
SELECT
*
FROM
t2
;
CREATE
TABLE
t3
(
...
...
@@ -156,7 +173,7 @@ WHO CHAR(12),
WEEK
INT
(
2
)
FIELD_FORMAT
=
'WEEK:[2]:NUMBER'
,
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'WEEK:[2]:EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'WEEK:[2]:EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
on'
;
SELECT
*
FROM
t3
;
CREATE
TABLE
t4
(
...
...
@@ -164,7 +181,7 @@ WHO CHAR(12),
WEEK
INT
(
2
)
FIELD_FORMAT
=
'WEEK:[3]:NUMBER'
,
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'WEEK:[3]:EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'WEEK:[3]:EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'expense.js
on'
;
SELECT
*
FROM
t4
;
--
echo
#
...
...
@@ -187,7 +204,7 @@ WHO CHAR(12),
WEEK
INT
(
2
),
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp3.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp3.js
on'
;
SELECT
*
FROM
t2
;
CREATE
TABLE
t3
(
...
...
@@ -195,7 +212,7 @@ WHO CHAR(12),
WEEK
INT
(
2
),
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp4.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp4.js
on'
;
SELECT
*
FROM
t3
;
CREATE
TABLE
t4
(
...
...
@@ -203,7 +220,7 @@ WHO CHAR(12),
WEEK
INT
(
2
),
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp5.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp5.js
on'
;
SELECT
*
FROM
t4
;
--
echo
#
...
...
@@ -214,7 +231,7 @@ WHO CHAR(12),
WEEK
INT
(
2
),
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp*.js
n'
MULTIPLE
=
1
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp*.js
on'
MULTIPLE
=
1
;
SELECT
*
FROM
t1
ORDER
BY
WHO
,
WEEK
,
WHAT
,
AMOUNT
;
DROP
TABLE
t1
;
...
...
@@ -226,7 +243,7 @@ WHO CHAR(12),
WEEK
INT
(
2
),
WHAT
CHAR
(
32
)
FIELD_FORMAT
=
'EXPENSE:[X]:WHAT'
,
AMOUNT
DOUBLE
(
8
,
2
)
FIELD_FORMAT
=
'EXPENSE:[X]:AMOUNT'
)
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp%s.js
n'
;
ENGINE
=
CONNECT
TABLE_TYPE
=
JSON
FILE_NAME
=
'mulexp%s.js
on'
;
ALTER
TABLE
t1
PARTITION
BY
LIST
COLUMNS
(
WEEK
)
(
PARTITION
`3`
VALUES
IN
(
3
),
...
...
@@ -240,8 +257,8 @@ DROP TABLE t1, t2, t3, t4;
#
# Clean up
#
--
remove_file
$MYSQLD_DATADIR
/
test
/
biblio
.
js
n
--
remove_file
$MYSQLD_DATADIR
/
test
/
expense
.
js
n
--
remove_file
$MYSQLD_DATADIR
/
test
/
mulexp3
.
js
n
--
remove_file
$MYSQLD_DATADIR
/
test
/
mulexp4
.
js
n
--
remove_file
$MYSQLD_DATADIR
/
test
/
mulexp5
.
js
n
--
remove_file
$MYSQLD_DATADIR
/
test
/
biblio
.
js
on
--
remove_file
$MYSQLD_DATADIR
/
test
/
expense
.
js
on
--
remove_file
$MYSQLD_DATADIR
/
test
/
mulexp3
.
js
on
--
remove_file
$MYSQLD_DATADIR
/
test
/
mulexp4
.
js
on
--
remove_file
$MYSQLD_DATADIR
/
test
/
mulexp5
.
js
on
storage/connect/tabmul.cpp
View file @
48a77e61
...
...
@@ -238,7 +238,7 @@ bool TDBMUL::InitFileNames(PGLOBAL g)
continue
;
// Not a match
strcat
(
strcpy
(
filename
,
direc
),
entry
->
d_name
);
pfn
[
n
]
=
PlugDup
(
g
,
filename
);
pfn
[
n
++
]
=
PlugDup
(
g
,
filename
);
if
(
trace
)
htrc
(
"Adding pfn[%d] %s
\n
"
,
n
,
filename
);
...
...
storage/connect/tabmysql.cpp
View file @
48a77e61
...
...
@@ -1078,8 +1078,7 @@ bool TDBMYSQL::ReadKey(PGLOBAL g, OPVAL op, const void *key, int len)
if
(
Myc
.
m_Res
)
Myc
.
FreeResult
();
To_Def
->
GetHandler
()
->
MakeKeyWhere
(
g
,
Query
->
GetStr
(),
op
,
"`"
,
key
,
len
);
To_Def
->
GetHandler
()
->
MakeKeyWhere
(
g
,
Query
,
op
,
'`'
,
key
,
len
);
if
(
To_CondFil
)
{
oom
=
Query
->
Append
(
" AND ("
);
...
...
storage/connect/value.cpp
View file @
48a77e61
...
...
@@ -627,6 +627,7 @@ int TYPVAL<double>::GetValLen(void)
template
<
class
TYPE
>
bool
TYPVAL
<
TYPE
>::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
if
(
valp
!=
this
)
{
if
(
chktype
&&
Type
!=
valp
->
GetType
())
return
true
;
...
...
@@ -635,6 +636,8 @@ bool TYPVAL<TYPE>::SetValue_pval(PVAL valp, bool chktype)
else
Reset
();
}
// endif valp
return
false
;
}
// end of SetValue
...
...
@@ -1319,6 +1322,7 @@ ulonglong TYPVAL<PSZ>::GetUBigintValue(void)
/***********************************************************************/
bool
TYPVAL
<
PSZ
>::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
if
(
valp
!=
this
)
{
if
(
chktype
&&
(
valp
->
GetType
()
!=
Type
||
valp
->
GetSize
()
>
Len
))
return
true
;
...
...
@@ -1329,6 +1333,8 @@ bool TYPVAL<PSZ>::SetValue_pval(PVAL valp, bool chktype)
else
Reset
();
}
// endif valp
return
false
;
}
// end of SetValue_pval
...
...
@@ -2063,11 +2069,12 @@ double BINVAL::GetFloatValue(void)
/***********************************************************************/
bool
BINVAL
::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
bool
rc
=
false
;
if
(
valp
!=
this
)
{
if
(
chktype
&&
(
valp
->
GetType
()
!=
Type
||
valp
->
GetSize
()
>
Clen
))
return
true
;
bool
rc
=
false
;
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
{
if
((
rc
=
(
Len
=
valp
->
GetSize
())
>
Clen
))
Len
=
Clen
;
...
...
@@ -2076,6 +2083,8 @@ bool BINVAL::SetValue_pval(PVAL valp, bool chktype)
}
else
Reset
();
}
// endif valp
return
rc
;
}
// end of SetValue_pval
...
...
@@ -2629,6 +2638,7 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
/***********************************************************************/
bool
DTVAL
::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
if
(
valp
!=
this
)
{
if
(
chktype
&&
Type
!=
valp
->
GetType
())
return
true
;
...
...
@@ -2645,6 +2655,8 @@ bool DTVAL::SetValue_pval(PVAL valp, bool chktype)
}
else
Reset
();
}
// endif valp
return
false
;
}
// end of SetValue
...
...
storage/connect/xobject.cpp
View file @
48a77e61
...
...
@@ -289,6 +289,34 @@ bool STRING::Set(char *s, uint n)
return
false
;
}
// 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. */
/***********************************************************************/
...
...
storage/connect/xobject.h
View file @
48a77e61
...
...
@@ -134,6 +134,7 @@ class DllExport STRING : public BLOCK {
inline
void
Reset
(
void
)
{
*
Strp
=
0
;}
bool
Set
(
PSZ
s
);
bool
Set
(
char
*
s
,
uint
n
);
bool
Append
(
const
char
*
s
,
uint
ln
);
bool
Append
(
PSZ
s
);
bool
Append
(
STRING
&
str
);
bool
Append
(
char
c
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment