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
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
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
Hide 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 @@ public:
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
[
{
"ISBN": "9782212090819",
"LANG": "fr",
"SUBJECT": "applications",
"AUTHOR": [
{
"FIRSTNAME": "Jean-Christophe",
"LASTNAME": "Bernadac"
},
{
"FIRSTNAME": "François",
"LASTNAME": "Knab"
}
],
"TITLE": "Construire une application XML",
"PUBLISHER": {
"NAME": "Eyrolles",
"PLACE": "Paris"
},
"DATEPUB": 1999
},
{
"ISBN": "9782840825685",
"LANG": "fr",
"SUBJECT": "applications",
"AUTHOR": [
{
"FIRSTNAME": "William J.",
"LASTNAME": "Pardi"
}
],
"TITLE": "XML en Action",
"TRANSLATION": "adapté de l'anglais par",
"TRANSLATOR": {
"FIRSTNAME": "James",
"LASTNAME": "Guerin"
},
"PUBLISHER": {
"NAME": "Microsoft Press",
"PLACE": "Paris"
},
"DATEPUB": 1999
}
]
[
{
"ISBN"
:
"9782212090819"
,
"LANG"
:
"fr"
,
"SUBJECT"
:
"applications"
,
"AUTHOR"
:
[
{
"FIRSTNAME"
:
"Jean-Christophe"
,
"LASTNAME"
:
"Bernadac"
},
{
"FIRSTNAME"
:
"François"
,
"LASTNAME"
:
"Knab"
}
],
"TITLE"
:
"Construire une application XML"
,
"PUBLISHER"
:
{
"NAME"
:
"Eyrolles"
,
"PLACE"
:
"Paris"
},
"DATEPUB"
:
1999
},
{
"ISBN"
:
"9782840825685"
,
"LANG"
:
"fr"
,
"SUBJECT"
:
"applications"
,
"AUTHOR"
:
[
{
"FIRSTNAME"
:
"William J."
,
"LASTNAME"
:
"Pardi"
}
],
"TITLE"
:
"XML en Action"
,
"TRANSLATION"
:
"adapté de l'anglais par"
,
"TRANSLATOR"
:
{
"FIRSTNAME"
:
"James"
,
"LASTNAME"
:
"Guerin"
},
"PUBLISHER"
:
{
"NAME"
:
"Microsoft Press"
,
"PLACE"
:
"Paris"
},
"DATEPUB"
:
1999
}
]
storage/connect/mysql-test/connect/std_data/expense.jsn
→
storage/connect/mysql-test/connect/std_data/expense.js
o
n
View file @
48a77e61
[
{
"WHO": "Joe",
"WEEK": [
{
"NUMBER": 3,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 18.00
},
{
"WHAT": "Food",
"AMOUNT": 12.00
},
{
"WHAT": "Food",
"AMOUNT": 19.00
},
{
"WHAT": "Car",
"AMOUNT": 20.00
}
]
},
{
"NUMBER": 4,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 19.00
},
{
"WHAT": "Beer",
"AMOUNT": 16.00
},
{
"WHAT": "Food",
"AMOUNT": 17.00
},
{
"WHAT": "Food",
"AMOUNT": 17.00
},
{
"WHAT": "Beer",
"AMOUNT": 14.00
}
]
},
{
"NUMBER": 5,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 14.00
},
{
"WHAT": "Food",
"AMOUNT": 12.00
}
]
}
]
},
{
"WHO": "Beth",
"WEEK": [
{
"NUMBER": 3,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 16.00
}
]
},
{
"NUMBER": 4,
"EXPENSE": [
{
"WHAT": "Food",
"AMOUNT": 17.00
},
{
"WHAT": "Beer",
"AMOUNT": 15.00
}
]
},
{
"NUMBER": 5,
"EXPENSE": [
{
"WHAT": "Food",
"AMOUNT": 12.00
},
{
"WHAT": "Beer",
"AMOUNT": 20.00
}
]
}
]
},
{
"WHO": "Janet",
"WEEK": [
{
"NUMBER": 3,
"EXPENSE": [
{
"WHAT": "Car",
"AMOUNT": 19.00
},
{
"WHAT": "Food",
"AMOUNT": 18.00
},
{
"WHAT": "Beer",
"AMOUNT": 18.00
}
]
},
{
"NUMBER": 4,
"EXPENSE": [
{
"WHAT": "Car",
"AMOUNT": 17.00
}
]
},
{
"NUMBER": 5,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 14.00
},
{
"WHAT": "Car",
"AMOUNT": 12.00
},
{
"WHAT": "Beer",
"AMOUNT": 19.00
},
{
"WHAT": "Food",
"AMOUNT": 12.00
}
]
}
]
}
]
[
{
"WHO"
:
"Joe"
,
"WEEK"
:
[
{
"NUMBER"
:
3
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
18.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
20.00
}
]
},
{
"NUMBER"
:
4
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
16.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
17.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
17.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
14.00
}
]
},
{
"NUMBER"
:
5
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
14.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
}
]
}
]
},
{
"WHO"
:
"Beth"
,
"WEEK"
:
[
{
"NUMBER"
:
3
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
16.00
}
]
},
{
"NUMBER"
:
4
,
"EXPENSE"
:
[
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
17.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
15.00
}
]
},
{
"NUMBER"
:
5
,
"EXPENSE"
:
[
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
20.00
}
]
}
]
},
{
"WHO"
:
"Janet"
,
"WEEK"
:
[
{
"NUMBER"
:
3
,
"EXPENSE"
:
[
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
18.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
18.00
}
]
},
{
"NUMBER"
:
4
,
"EXPENSE"
:
[
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
17.00
}
]
},
{
"NUMBER"
:
5
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
14.00
},
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
12.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
}
]
}
]
}
]
storage/connect/mysql-test/connect/std_data/mulexp3.jsn
→
storage/connect/mysql-test/connect/std_data/mulexp3.js
o
n
View file @
48a77e61
[
{
"WHO": "Joe",
"WEEK": 3,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 18.00
},
{
"WHAT": "Food",
"AMOUNT": 12.00
},
{
"WHAT": "Food",
"AMOUNT": 19.00
},
{
"WHAT": "Car",
"AMOUNT": 20.00
}
]
},
{
"WHO": "Beth",
"WEEK": 3,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 16.00
}
]
},
{
"WHO": "Janet",
"WEEK": 3,
"EXPENSE": [
{
"WHAT": "Car",
"AMOUNT": 19.00
},
{
"WHAT": "Food",
"AMOUNT": 18.00
},
{
"WHAT": "Beer",
"AMOUNT": 18.00
}
]
}
]
[
{
"WHO"
:
"Joe"
,
"WEEK"
:
3
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
18.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
20.00
}
]
},
{
"WHO"
:
"Beth"
,
"WEEK"
:
3
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
16.00
}
]
},
{
"WHO"
:
"Janet"
,
"WEEK"
:
3
,
"EXPENSE"
:
[
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
18.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
18.00
}
]
}
]
storage/connect/mysql-test/connect/std_data/mulexp4.jsn
→
storage/connect/mysql-test/connect/std_data/mulexp4.js
o
n
View file @
48a77e61
[
{
"WHO": "Joe",
"WEEK": 4,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 19.00
},
{
"WHAT": "Beer",
"AMOUNT": 16.00
},
{
"WHAT": "Food",
"AMOUNT": 17.00
},
{
"WHAT": "Food",
"AMOUNT": 17.00
},
{
"WHAT": "Beer",
"AMOUNT": 14.00
}
]
},
{
"WHO": "Beth",
"WEEK": 4,
"EXPENSE": [
{
"WHAT": "Food",
"AMOUNT": 17.00
},
{
"WHAT": "Beer",
"AMOUNT": 15.00
}
]
},
{
"WHO": "Janet",
"WEEK": 4,
"EXPENSE": [
{
"WHAT": "Car",
"AMOUNT": 17.00
}
]
}
]
[
{
"WHO"
:
"Joe"
,
"WEEK"
:
4
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
16.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
17.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
17.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
14.00
}
]
},
{
"WHO"
:
"Beth"
,
"WEEK"
:
4
,
"EXPENSE"
:
[
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
17.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
15.00
}
]
},
{
"WHO"
:
"Janet"
,
"WEEK"
:
4
,
"EXPENSE"
:
[
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
17.00
}
]
}
]
storage/connect/mysql-test/connect/std_data/mulexp5.jsn
→
storage/connect/mysql-test/connect/std_data/mulexp5.js
o
n
View file @
48a77e61
[
{
"WHO": "Joe",
"WEEK": 5,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 14.00
},
{
"WHAT": "Food",
"AMOUNT": 12.00
}
]
},
{
"WHO": "Beth",
"WEEK": 5,
"EXPENSE": [
{
"WHAT": "Food",
"AMOUNT": 12.00
},
{
"WHAT": "Beer",
"AMOUNT": 20.00
}
]
},
{
"WHO": "Janet",
"WEEK": 5,
"EXPENSE": [
{
"WHAT": "Beer",
"AMOUNT": 14.00
},
{
"WHAT": "Car",
"AMOUNT": 12.00
},
{
"WHAT": "Beer",
"AMOUNT": 19.00
},
{
"WHAT": "Food",
"AMOUNT": 12.00
}
]
}
]
[
{
"WHO"
:
"Joe"
,
"WEEK"
:
5
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
14.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
}
]
},
{
"WHO"
:
"Beth"
,
"WEEK"
:
5
,
"EXPENSE"
:
[
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
20.00
}
]
},
{
"WHO"
:
"Janet"
,
"WEEK"
:
5
,
"EXPENSE"
:
[
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
14.00
},
{
"WHAT"
:
"Car"
,
"AMOUNT"
:
12.00
},
{
"WHAT"
:
"Beer"
,
"AMOUNT"
:
19.00
},
{
"WHAT"
:
"Food"
,
"AMOUNT"
:
12.00
}
]
}
]
storage/connect/mysql-test/connect/t/json.test
View file @
48a77e61
This diff is collapsed.
Click to expand it.
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,13 +627,16 @@ int TYPVAL<double>::GetValLen(void)
template
<
class
TYPE
>
bool
TYPVAL
<
TYPE
>::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
if
(
chktype
&&
Type
!=
valp
->
GetType
())
return
true
;
if
(
valp
!=
this
)
{
if
(
chktype
&&
Type
!=
valp
->
GetType
())
return
true
;
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
Tval
=
GetTypedValue
(
valp
);
else
Reset
();
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
Tval
=
GetTypedValue
(
valp
);
else
Reset
();
}
// endif valp
return
false
;
}
// end of SetValue
...
...
@@ -1319,15 +1322,18 @@ ulonglong TYPVAL<PSZ>::GetUBigintValue(void)
/***********************************************************************/
bool
TYPVAL
<
PSZ
>::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
if
(
chktype
&&
(
valp
->
GetType
()
!=
Type
||
valp
->
GetSize
()
>
Len
))
return
true
;
if
(
valp
!=
this
)
{
if
(
chktype
&&
(
valp
->
GetType
()
!=
Type
||
valp
->
GetSize
()
>
Len
))
return
true
;
char
buf
[
64
];
char
buf
[
64
];
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
strncpy
(
Strp
,
valp
->
GetCharString
(
buf
),
Len
);
else
Reset
();
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
strncpy
(
Strp
,
valp
->
GetCharString
(
buf
),
Len
);
else
Reset
();
}
// endif valp
return
false
;
}
// end of SetValue_pval
...
...
@@ -2063,18 +2069,21 @@ double BINVAL::GetFloatValue(void)
/***********************************************************************/
bool
BINVAL
::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
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
;
if
(
valp
!=
this
)
{
if
(
chktype
&&
(
valp
->
GetType
()
!=
Type
||
valp
->
GetSize
(
)
>
Clen
))
return
true
;
memcpy
(
Binp
,
valp
->
GetTo_Val
(),
Len
);
}
else
Reset
();
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
{
if
((
rc
=
(
Len
=
valp
->
GetSize
())
>
Clen
))
Len
=
Clen
;
memcpy
(
Binp
,
valp
->
GetTo_Val
(),
Len
);
}
else
Reset
();
}
// endif valp
return
rc
;
}
// end of SetValue_pval
...
...
@@ -2629,21 +2638,24 @@ bool DTVAL::MakeDate(PGLOBAL g, int *val, int nval)
/***********************************************************************/
bool
DTVAL
::
SetValue_pval
(
PVAL
valp
,
bool
chktype
)
{
if
(
chktype
&&
Type
!=
valp
->
GetType
())
return
true
;
if
(
valp
!=
this
)
{
if
(
chktype
&&
Type
!=
valp
->
GetType
())
return
true
;
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
{
if
(
Pdtp
&&
!
valp
->
IsTypeNum
())
{
int
ndv
;
int
dval
[
6
];
if
(
!
(
Null
=
valp
->
IsNull
()
&&
Nullable
))
{
if
(
Pdtp
&&
!
valp
->
IsTypeNum
())
{
int
ndv
;
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
Tval
=
valp
->
GetIntValue
();
Reset
();
}
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