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
4ec76c1d
Commit
4ec76c1d
authored
Mar 23, 2001
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge work:/my/mysql into tik.mysql.fi:/home/my/mysql
BitKeeper/etc/logging_ok: auto-union
parents
250bb75a
fd433598
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
179 additions
and
39 deletions
+179
-39
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+1
-0
Docs/manual.texi
Docs/manual.texi
+27
-6
mysql-test/r/func_str.result
mysql-test/r/func_str.result
+14
-0
mysql-test/r/update.result
mysql-test/r/update.result
+2
-0
mysql-test/t/func_str.test
mysql-test/t/func_str.test
+30
-0
mysql-test/t/update.test
mysql-test/t/update.test
+39
-0
sql/gen_lex_hash.cc
sql/gen_lex_hash.cc
+1
-1
sql/handler.cc
sql/handler.cc
+6
-5
sql/item_strfunc.cc
sql/item_strfunc.cc
+27
-13
sql/mysql_priv.h
sql/mysql_priv.h
+1
-0
sql/mysqld.cc
sql/mysqld.cc
+4
-0
sql/sql_insert.cc
sql/sql_insert.cc
+1
-1
sql/sql_parse.cc
sql/sql_parse.cc
+21
-11
sql/sql_yacc.yy
sql/sql_yacc.yy
+5
-2
No files found.
BitKeeper/etc/logging_ok
View file @
4ec76c1d
monty@tik.mysql.fi
sasha@mysql.sashanet.com
sasha@mysql.sashanet.com
Docs/manual.texi
View file @
4ec76c1d
...
@@ -13469,7 +13469,7 @@ to restart @code{mysqld} with @code{--skip-grant-tables} to run
...
@@ -13469,7 +13469,7 @@ to restart @code{mysqld} with @code{--skip-grant-tables} to run
* COMMIT:: @code{BEGIN/COMMIT/ROLLBACK} syntax
* COMMIT:: @code{BEGIN/COMMIT/ROLLBACK} syntax
* LOCK TABLES:: @code{LOCK TABLES/UNLOCK TABLES} syntax
* LOCK TABLES:: @code{LOCK TABLES/UNLOCK TABLES} syntax
* SET OPTION:: @code{SET OPTION} syntax
* SET OPTION:: @code{SET OPTION} syntax
* SET TRANSACTION::
* SET TRANSACTION::
@code{SET TRANSACTION} syntax
* GRANT:: @code{GRANT} and @code{REVOKE} syntax
* GRANT:: @code{GRANT} and @code{REVOKE} syntax
* CREATE INDEX:: @code{CREATE INDEX} syntax
* CREATE INDEX:: @code{CREATE INDEX} syntax
* DROP INDEX:: @code{DROP INDEX} syntax
* DROP INDEX:: @code{DROP INDEX} syntax
...
@@ -18499,7 +18499,8 @@ row length = 1
...
@@ -18499,7 +18499,8 @@ row length = 1
+ (number of variable-length columns)
+ (number of variable-length columns)
@end example
@end example
@item The @code{table_options} and @code{SELECT} options are only
@item
The @code{table_options} and @code{SELECT} options are only
implemented in @strong{MySQL} Version 3.23 and above.
implemented in @strong{MySQL} Version 3.23 and above.
The different table types are:
The different table types are:
...
@@ -18577,6 +18578,10 @@ mysql> CREATE TABLE test (a int not null auto_increment,
...
@@ -18577,6 +18578,10 @@ mysql> CREATE TABLE test (a int not null auto_increment,
This will create a @code{MyISAM} table with 3 columns. Note that the
This will create a @code{MyISAM} table with 3 columns. Note that the
table will automatically be deleted if any errors occur while copying
table will automatically be deleted if any errors occur while copying
data into the table.
data into the table.
To ensure that the update log/binary log can be used to re-create the
original tables, @strong{MySQL} will not allow concurrent inserts during
@code{CREATE TABLE .... SELECT}.
@item
@item
The @code{RAID_TYPE} option will help you to break the 2G/4G limit for
The @code{RAID_TYPE} option will help you to break the 2G/4G limit for
the MyISAM data file (not the index file) on
the MyISAM data file (not the index file) on
...
@@ -19913,6 +19918,11 @@ sub-select clauses, the situation could easily be very confusing!)
...
@@ -19913,6 +19918,11 @@ sub-select clauses, the situation could easily be very confusing!)
@item
@item
You can use the C API function @code{mysql_info()} to get information about
You can use the C API function @code{mysql_info()} to get information about
the query. @xref{INSERT}.
the query. @xref{INSERT}.
@item
To ensure that the update log/binary log can be used to re-create the
original tables, @strong{MySQL} will not allow concurrent inserts during
@code{INSERT .... SELECT}.
@end itemize
@end itemize
You can of course also use @code{REPLACE} instead of @code{INSERT} to
You can of course also use @code{REPLACE} instead of @code{INSERT} to
...
@@ -23861,8 +23871,8 @@ The @code{GEMINI} table type is developed and supported by NuSphere Corporation
...
@@ -23861,8 +23871,8 @@ The @code{GEMINI} table type is developed and supported by NuSphere Corporation
(@uref{http://www.nusphere.com}). It features row-level locking, transaction
(@uref{http://www.nusphere.com}). It features row-level locking, transaction
support (@code{COMMIT} and @code{ROLLBACK}), and automatic crash recovery.
support (@code{COMMIT} and @code{ROLLBACK}), and automatic crash recovery.
@code{GEMINI} tables will be included in
the @strong{MySQL} 3.23.35 source
@code{GEMINI} tables will be included in
some future @strong{MySQL} 3.23.X
distribution.
source
distribution.
@node GEMINI start, GEMINI features, GEMINI overview, GEMINI
@node GEMINI start, GEMINI features, GEMINI overview, GEMINI
@subsection GEMINI startup options
@subsection GEMINI startup options
...
@@ -41228,7 +41238,7 @@ are supported if the server and tables support them. It is
...
@@ -41228,7 +41238,7 @@ are supported if the server and tables support them. It is
thread-safe, and contains a compatibility module for older code
thread-safe, and contains a compatibility module for older code
written for the no-longer-maintained MySQLmodule interface.
written for the no-longer-maintained MySQLmodule interface.
@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_mex_1
1.tar.gz, mysql_mex_1_11
.tar.gz}
@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_mex_1
2.tar.gz, mysql_mex_1_12
.tar.gz}
An interface program for the Matlab program by MathWorks. The interface
An interface program for the Matlab program by MathWorks. The interface
is done by Kimmo Uutela and John Fisher (not by Mathworks).
is done by Kimmo Uutela and John Fisher (not by Mathworks).
Check @uref{http://boojum.hut.fi/~kuutela/mysqlmex.html,mysqlmex.html}
Check @uref{http://boojum.hut.fi/~kuutela/mysqlmex.html,mysqlmex.html}
...
@@ -42331,7 +42341,7 @@ users uses this code as the rest of the code and because of this we are
...
@@ -42331,7 +42341,7 @@ users uses this code as the rest of the code and because of this we are
not yet 100 % confident in this code.
not yet 100 % confident in this code.
@menu
@menu
* News-3.23.36::
* News-3.23.36::
Changes in release 3.23.36
* News-3.23.35:: Changes in release 3.23.35
* News-3.23.35:: Changes in release 3.23.35
* News-3.23.34a:: Changes in release 3.23.34a
* News-3.23.34a:: Changes in release 3.23.34a
* News-3.23.34:: Changes in release 3.23.34
* News-3.23.34:: Changes in release 3.23.34
...
@@ -42377,6 +42387,17 @@ not yet 100 % confident in this code.
...
@@ -42377,6 +42387,17 @@ not yet 100 % confident in this code.
Added @code{SET TRANSACTION ISOLATION LEVEL ...}
Added @code{SET TRANSACTION ISOLATION LEVEL ...}
@item
@item
Added @code{SELECT ... FOR UPDATE}.
Added @code{SELECT ... FOR UPDATE}.
@item
Fixed bug where affected rows where not returned when @code{MySQL} was compiled
without transaction support.
@item
Fixed a bug in @code{UPDATE} where keys weren't always used to find the
rows to be updated.
@item
Fixed a bug in @code{CONCAT_WS()} where it returned wrong results.
@item
Changed @code{CREATE ... INSERT} and @code{INSERT ... SELECT} to not
allow concurrent inserts as this could make the binary log hard to repeat.
@end itemize
@end itemize
@node News-3.23.35, News-3.23.34a, News-3.23.36, News-3.23.x
@node News-3.23.35, News-3.23.34a, News-3.23.36, News-3.23.x
mysql-test/r/func_str.result
View file @
4ec76c1d
...
@@ -34,6 +34,14 @@ concat(':',trim(LEADING '.*' FROM '.*my'),':',trim(TRAILING '.*' FROM 'sql.*.*')
...
@@ -34,6 +34,14 @@ concat(':',trim(LEADING '.*' FROM '.*my'),':',trim(TRAILING '.*' FROM 'sql.*.*')
:my:sql:
:my:sql:
TRIM("foo" FROM "foo") TRIM("foo" FROM "foook") TRIM("foo" FROM "okfoo")
TRIM("foo" FROM "foo") TRIM("foo" FROM "foook") TRIM("foo" FROM "okfoo")
ok ok
ok ok
concat_ws(', ','monty','was here','again')
monty, was here, again
concat_ws(NULL,'a') concat_ws(',',NULL,'')
NULL
concat_ws(',','',NULL,'a')
a
CONCAT('"',CONCAT_WS('";"',repeat('a',60),repeat('b',60),repeat('c',60),repeat('d',100)), '"')
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc";"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
insert('txs',2,1,'hi') insert('is ',4,0,'a') insert('txxxxt',2,4,'es')
insert('txs',2,1,'hi') insert('is ',4,0,'a') insert('txxxxt',2,4,'es')
this is a test
this is a test
replace('aaaa','a','b') replace('aaaa','aa','b') replace('aaaa','a','bb') replace('aaaa','','b') replace('bbbb','a','c')
replace('aaaa','a','b') replace('aaaa','aa','b') replace('aaaa','a','bb') replace('aaaa','','b') replace('bbbb','a','c')
...
@@ -96,3 +104,9 @@ domain
...
@@ -96,3 +104,9 @@ domain
hello.de
hello.de
domain
domain
test.de
test.de
CONCAT('"',CONCAT_WS('";"',title,prio,category,program,bugdesc,created,modified,bugstatus,submitter), '"')
"Link";"1";"1";"1";"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";"2001-02-28 08:40:16";"20010228084016";"0";"4"
CONCAT('"',CONCAT_WS('";"',title,prio,category,program,bugstatus,submitter), '"')
"Link";"1";"1";"1";"0";"4"
CONCAT_WS('";"',title,prio,category,program,bugdesc,created,modified,bugstatus,submitter)
Link";"1";"1";"1";"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";"2001-02-28 08:40:16";"20010228084016";"0";"4
mysql-test/r/update.result
View file @
4ec76c1d
...
@@ -37,3 +37,5 @@ a
...
@@ -37,3 +37,5 @@ a
146
146
place_id shows
place_id shows
1 1
1 1
status
1
mysql-test/t/func_str.test
View file @
4ec76c1d
...
@@ -4,6 +4,8 @@
...
@@ -4,6 +4,8 @@
# -----------
# -----------
# Testing string functions
# Testing string functions
drop
table
if
exists
t1
;
select
'hello'
,
"'hello'"
,
'""hello""'
,
'''h''e''l''l''o'''
,
"hel""lo"
,
'hel\'lo'
;
select
'hello'
,
"'hello'"
,
'""hello""'
,
'''h''e''l''l''o'''
,
"hel""lo"
,
'hel\'lo'
;
select
'hello'
'monty'
;
select
'hello'
'monty'
;
select
length
(
'\n\t\r\b\0\_\%\\'
);
select
length
(
'\n\t\r\b\0\_\%\\'
);
...
@@ -24,6 +26,11 @@ select concat(':',trim(BOTH 'ab' FROM 'ababmyabab'),':',trim(BOTH '*' FROM '***s
...
@@ -24,6 +26,11 @@ select concat(':',trim(BOTH 'ab' FROM 'ababmyabab'),':',trim(BOTH '*' FROM '***s
select
concat
(
':'
,
trim
(
LEADING
'.*'
FROM
'.*my'
),
':'
,
trim
(
TRAILING
'.*'
FROM
'sql.*.*'
),
':'
);
select
concat
(
':'
,
trim
(
LEADING
'.*'
FROM
'.*my'
),
':'
,
trim
(
TRAILING
'.*'
FROM
'sql.*.*'
),
':'
);
select
TRIM
(
"foo"
FROM
"foo"
),
TRIM
(
"foo"
FROM
"foook"
),
TRIM
(
"foo"
FROM
"okfoo"
);
select
TRIM
(
"foo"
FROM
"foo"
),
TRIM
(
"foo"
FROM
"foook"
),
TRIM
(
"foo"
FROM
"okfoo"
);
select
concat_ws
(
', '
,
'monty'
,
'was here'
,
'again'
);
select
concat_ws
(
NULL
,
'a'
),
concat_ws
(
','
,
NULL
,
''
);
select
concat_ws
(
','
,
''
,
NULL
,
'a'
);
SELECT
CONCAT
(
'"'
,
CONCAT_WS
(
'";"'
,
repeat
(
'a'
,
60
),
repeat
(
'b'
,
60
),
repeat
(
'c'
,
60
),
repeat
(
'd'
,
100
)),
'"'
);
select
insert
(
'txs'
,
2
,
1
,
'hi'
),
insert
(
'is '
,
4
,
0
,
'a'
),
insert
(
'txxxxt'
,
2
,
4
,
'es'
);
select
insert
(
'txs'
,
2
,
1
,
'hi'
),
insert
(
'is '
,
4
,
0
,
'a'
),
insert
(
'txxxxt'
,
2
,
4
,
'es'
);
select
replace
(
'aaaa'
,
'a'
,
'b'
),
replace
(
'aaaa'
,
'aa'
,
'b'
),
replace
(
'aaaa'
,
'a'
,
'bb'
),
replace
(
'aaaa'
,
''
,
'b'
),
replace
(
'bbbb'
,
'a'
,
'c'
);
select
replace
(
'aaaa'
,
'a'
,
'b'
),
replace
(
'aaaa'
,
'aa'
,
'b'
),
replace
(
'aaaa'
,
'a'
,
'bb'
),
replace
(
'aaaa'
,
''
,
'b'
),
replace
(
'bbbb'
,
'a'
,
'c'
);
select
replace
(
concat
(
lcase
(
concat
(
'THIS'
,
' '
,
'IS'
,
' '
,
'A'
,
' '
)),
ucase
(
'false'
),
' '
,
'test'
),
'FALSE'
,
'REAL'
)
;
select
replace
(
concat
(
lcase
(
concat
(
'THIS'
,
' '
,
'IS'
,
' '
,
'A'
,
' '
)),
ucase
(
'false'
),
' '
,
'test'
),
'FALSE'
,
'REAL'
)
;
...
@@ -70,3 +77,26 @@ insert into t1 VALUES ("hello.de" ), ("test.de" );
...
@@ -70,3 +77,26 @@ insert into t1 VALUES ("hello.de" ), ("test.de" );
select
domain
from
t1
where
concat
(
'@'
,
trim
(
leading
'.'
from
concat
(
'.'
,
domain
)))
=
'@hello.de'
;
select
domain
from
t1
where
concat
(
'@'
,
trim
(
leading
'.'
from
concat
(
'.'
,
domain
)))
=
'@hello.de'
;
select
domain
from
t1
where
concat
(
'@'
,
trim
(
leading
'.'
from
concat
(
'.'
,
domain
)))
=
'@test.de'
;
select
domain
from
t1
where
concat
(
'@'
,
trim
(
leading
'.'
from
concat
(
'.'
,
domain
)))
=
'@test.de'
;
drop
table
t1
;
drop
table
t1
;
#
# Test bug in concat_ws
#
CREATE
TABLE
t1
(
id
int
(
10
)
unsigned
NOT
NULL
,
title
varchar
(
255
)
default
NULL
,
prio
int
(
10
)
unsigned
default
NULL
,
category
int
(
10
)
unsigned
default
NULL
,
program
int
(
10
)
unsigned
default
NULL
,
bugdesc
text
,
created
datetime
default
NULL
,
modified
timestamp
(
14
)
NOT
NULL
,
bugstatus
int
(
10
)
unsigned
default
NULL
,
submitter
int
(
10
)
unsigned
default
NULL
)
TYPE
=
MyISAM
;
INSERT
INTO
t1
VALUES
(
1
,
'Link'
,
1
,
1
,
1
,
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
,
'2001-02-28 08:40:16'
,
20010228084016
,
0
,
4
);
SELECT
CONCAT
(
'"'
,
CONCAT_WS
(
'";"'
,
title
,
prio
,
category
,
program
,
bugdesc
,
created
,
modified
,
bugstatus
,
submitter
),
'"'
)
FROM
t1
;
SELECT
CONCAT
(
'"'
,
CONCAT_WS
(
'";"'
,
title
,
prio
,
category
,
program
,
bugstatus
,
submitter
),
'"'
)
FROM
t1
;
SELECT
CONCAT_WS
(
'";"'
,
title
,
prio
,
category
,
program
,
bugdesc
,
created
,
modified
,
bugstatus
,
submitter
)
FROM
t1
;
drop
table
t1
;
mysql-test/t/update.test
View file @
4ec76c1d
...
@@ -37,3 +37,42 @@ VALUES (1,0,0,0,0,0,0,20000928174434);
...
@@ -37,3 +37,42 @@ VALUES (1,0,0,0,0,0,0,20000928174434);
UPDATE
t1
SET
shows
=
shows
+
1
,
ishows
=
ishows
+
1
,
ushows
=
ushows
+
1
,
clicks
=
clicks
+
1
,
iclicks
=
iclicks
+
1
,
uclicks
=
uclicks
+
1
WHERE
place_id
=
1
AND
ts
>=
"2000-09-28 00:00:00"
;
UPDATE
t1
SET
shows
=
shows
+
1
,
ishows
=
ishows
+
1
,
ushows
=
ushows
+
1
,
clicks
=
clicks
+
1
,
iclicks
=
iclicks
+
1
,
uclicks
=
uclicks
+
1
WHERE
place_id
=
1
AND
ts
>=
"2000-09-28 00:00:00"
;
select
place_id
,
shows
from
t1
;
select
place_id
,
shows
from
t1
;
drop
table
t1
;
drop
table
t1
;
#
# Test bug with update reported by Jan Legenhausen
#
CREATE
TABLE
t1
(
lfdnr
int
(
10
)
unsigned
NOT
NULL
default
'0'
,
ticket
int
(
10
)
unsigned
NOT
NULL
default
'0'
,
client
varchar
(
255
)
NOT
NULL
default
''
,
replyto
varchar
(
255
)
NOT
NULL
default
''
,
subject
varchar
(
100
)
NOT
NULL
default
''
,
timestamp
int
(
10
)
unsigned
NOT
NULL
default
'0'
,
tstamp
timestamp
(
14
)
NOT
NULL
,
status
int
(
3
)
NOT
NULL
default
'0'
,
type
varchar
(
15
)
NOT
NULL
default
''
,
assignment
int
(
10
)
unsigned
NOT
NULL
default
'0'
,
fupcount
int
(
4
)
unsigned
NOT
NULL
default
'0'
,
parent
int
(
10
)
unsigned
NOT
NULL
default
'0'
,
activity
int
(
10
)
unsigned
NOT
NULL
default
'0'
,
priority
tinyint
(
1
)
unsigned
NOT
NULL
default
'1'
,
cc
varchar
(
255
)
NOT
NULL
default
''
,
bcc
varchar
(
255
)
NOT
NULL
default
''
,
body
text
NOT
NULL
,
comment
text
,
header
text
,
PRIMARY
KEY
(
lfdnr
),
KEY
k1
(
timestamp
),
KEY
k2
(
type
),
KEY
k3
(
parent
),
KEY
k4
(
assignment
),
KEY
ticket
(
ticket
)
)
TYPE
=
MyISAM
;
INSERT
INTO
t1
VALUES
(
773
,
773
,
''
,
''
,
''
,
980257344
,
20010318180652
,
0
,
'Open'
,
10
,
0
,
0
,
0
,
1
,
''
,
''
,
''
,
''
,
''
);
alter
table
t1
change
lfdnr
lfdnr
int
(
10
)
unsigned
default
0
not
null
auto_increment
;
update
t1
set
status
=
1
where
type
=
'Open'
;
select
status
from
t1
;
drop
table
t1
;
sql/gen_lex_hash.cc
View file @
4ec76c1d
...
@@ -472,7 +472,7 @@ int main(int argc,char **argv)
...
@@ -472,7 +472,7 @@ int main(int argc,char **argv)
int
error
;
int
error
;
MY_INIT
(
argv
[
0
]);
MY_INIT
(
argv
[
0
]);
start_value
=
5315771L
;
best_t1
=
6916833L
;
best_t2
=
3813748L
;
best_type
=
3
;
/* mode=5839
add=5 type: 0 */
start_value
=
318439L
;
best_t1
=
7136932L
;
best_t2
=
1067561L
;
best_type
=
0
;
/* mode=5413
add=5 type: 0 */
if
(
get_options
(
argc
,(
char
**
)
argv
))
if
(
get_options
(
argc
,(
char
**
)
argv
))
exit
(
1
);
exit
(
1
);
...
...
sql/handler.cc
View file @
4ec76c1d
...
@@ -55,16 +55,17 @@ const char *ha_table_type[] = {
...
@@ -55,16 +55,17 @@ const char *ha_table_type[] = {
"MRG_ISAM"
,
"MYISAM"
,
"MRG_MYISAM"
,
"BDB"
,
"INNOBASE"
,
"GEMINI"
,
"?"
,
"?"
,
NullS
"MRG_ISAM"
,
"MYISAM"
,
"MRG_MYISAM"
,
"BDB"
,
"INNOBASE"
,
"GEMINI"
,
"?"
,
"?"
,
NullS
};
};
TYPELIB
ha_table_typelib
=
{
array_elements
(
ha_table_type
)
-
4
,
""
,
ha_table_type
+
1
};
const
char
*
ha_row_type
[]
=
{
const
char
*
ha_row_type
[]
=
{
""
,
"FIXED"
,
"DYNAMIC"
,
"COMPRESSED"
,
"?"
,
"?"
,
"?"
""
,
"FIXED"
,
"DYNAMIC"
,
"COMPRESSED"
,
"?"
,
"?"
,
"?"
};
};
TYPELIB
ha_table_typelib
=
{
array_elements
(
ha_table_type
)
-
4
,
""
,
ha_table_type
+
1
};
const
char
*
tx_isolation_names
[]
=
const
char
*
tx_isolation_names
[]
=
{
"READ-UNCOMMITTED"
,
"READ-COMMITTED"
,
"REPEATABLE-READ"
,
"SERIALIZABLE"
};
{
"READ-UNCOMMITTED"
,
"READ-COMMITTED"
,
"REPEATABLE-READ"
,
"SERIALIZABLE"
,
TYPELIB
tx_isolation_typelib
=
{
array_elements
(
tx_isolation_names
),
""
,
NullS
};
TYPELIB
tx_isolation_typelib
=
{
array_elements
(
tx_isolation_names
)
-
1
,
""
,
tx_isolation_names
};
tx_isolation_names
};
/* Use other database handler if databasehandler is not incompiled */
/* Use other database handler if databasehandler is not incompiled */
...
...
sql/item_strfunc.cc
View file @
4ec76c1d
...
@@ -223,9 +223,9 @@ String *Item_func_concat_ws::val_str(String *str)
...
@@ -223,9 +223,9 @@ String *Item_func_concat_ws::val_str(String *str)
// Skip until non-null and non-empty argument is found.
// Skip until non-null and non-empty argument is found.
// If not, return the empty string
// If not, return the empty string
for
(
i
=
0
;
for
(
i
=
0
;
i
<
arg_count
;
i
++
)
!
(
res
=
args
[
i
]
->
val_str
(
str
))
||
!
res
->
length
()
&&
i
<
arg_count
;
if
((
res
=
args
[
i
]
->
val_str
(
str
))
&&
res
->
length
())
i
++
)
;
break
;
if
(
i
==
arg_count
)
if
(
i
==
arg_count
)
return
&
empty_string
;
return
&
empty_string
;
...
@@ -242,38 +242,52 @@ String *Item_func_concat_ws::val_str(String *str)
...
@@ -242,38 +242,52 @@ String *Item_func_concat_ws::val_str(String *str)
{
// Use old buffer
{
// Use old buffer
res
->
append
(
*
sep_str
);
// res->length() > 0 always
res
->
append
(
*
sep_str
);
// res->length() > 0 always
res
->
append
(
*
res2
);
res
->
append
(
*
res2
);
use_as_buff
=
&
tmp_value
;
}
}
else
if
(
str
->
alloced_length
()
>=
else
if
(
str
->
alloced_length
()
>=
res
->
length
()
+
sep_str
->
length
()
+
res2
->
length
())
res
->
length
()
+
sep_str
->
length
()
+
res2
->
length
())
{
{
str
->
copy
(
*
res
);
/* We have room in str; We can't get any errors here */
str
->
append
(
*
sep_str
);
if
(
str
==
res2
)
str
->
append
(
*
res2
);
{
// This is quote uncommon!
str
->
replace
(
0
,
0
,
*
sep_str
);
str
->
replace
(
0
,
0
,
*
res
);
}
else
{
str
->
copy
(
*
res
);
str
->
append
(
*
sep_str
);
str
->
append
(
*
res2
);
}
res
=
str
;
res
=
str
;
use_as_buff
=
&
tmp_value
;
use_as_buff
=
&
tmp_value
;
}
}
else
if
(
res
==
&
tmp_value
)
else
if
(
res
==
&
tmp_value
)
{
{
if
(
(
res
->
length
()
&&
res
->
append
(
*
sep_str
)
)
||
res
->
append
(
*
res2
))
if
(
res
->
append
(
*
sep_str
)
||
res
->
append
(
*
res2
))
goto
null
;
// Must be a blob
goto
null
;
// Must be a blob
}
}
else
if
(
res2
==
&
tmp_value
)
{
// This can happend only 1 time
if
(
tmp_value
.
replace
(
0
,
0
,
*
sep_str
)
||
tmp_value
.
replace
(
0
,
0
,
*
res
))
goto
null
;
res
=
&
tmp_value
;
use_as_buff
=
str
;
// Put next arg here
}
else
if
(
tmp_value
.
is_alloced
()
&&
res2
->
ptr
()
>=
tmp_value
.
ptr
()
&&
else
if
(
tmp_value
.
is_alloced
()
&&
res2
->
ptr
()
>=
tmp_value
.
ptr
()
&&
res2
->
ptr
()
<
=
tmp_value
.
ptr
()
+
tmp_value
.
alloced_length
())
res2
->
ptr
()
<
tmp_value
.
ptr
()
+
tmp_value
.
alloced_length
())
{
{
/*
/*
This happens really seldom:
This happens really seldom:
In this case res2 is sub string of tmp_value. We will
In this case res2 is sub string of tmp_value. We will
now work in place in tmp_value to set it to res | res2
now work in place in tmp_value to set it to res |
sep_str |
res2
*/
*/
/* Chop the last characters in tmp_value that isn't in res2 */
/* Chop the last characters in tmp_value that isn't in res2 */
tmp_value
.
length
((
uint32
)
(
res2
->
ptr
()
-
tmp_value
.
ptr
())
+
tmp_value
.
length
((
uint32
)
(
res2
->
ptr
()
-
tmp_value
.
ptr
())
+
res2
->
length
());
res2
->
length
());
/* Place res2 at start of tmp_value, remove chars before res2 */
/* Place res2 at start of tmp_value, remove chars before res2 */
if
(
res
->
append
(
*
sep_str
))
goto
null
;
if
(
tmp_value
.
replace
(
0
,(
uint32
)
(
res2
->
ptr
()
-
tmp_value
.
ptr
()),
if
(
tmp_value
.
replace
(
0
,(
uint32
)
(
res2
->
ptr
()
-
tmp_value
.
ptr
()),
*
res
))
*
res
)
||
tmp_value
.
replace
(
res
->
length
(),
0
,
*
sep_str
))
goto
null
;
goto
null
;
res
=
&
tmp_value
;
res
=
&
tmp_value
;
use_as_buff
=
str
;
// Put next arg here
use_as_buff
=
str
;
// Put next arg here
...
...
sql/mysql_priv.h
View file @
4ec76c1d
...
@@ -536,6 +536,7 @@ extern bool low_priority_updates;
...
@@ -536,6 +536,7 @@ extern bool low_priority_updates;
extern
bool
opt_sql_bin_update
,
opt_safe_show_db
;
extern
bool
opt_sql_bin_update
,
opt_safe_show_db
;
extern
char
language
[
LIBLEN
],
reg_ext
[
FN_EXTLEN
],
blob_newline
;
extern
char
language
[
LIBLEN
],
reg_ext
[
FN_EXTLEN
],
blob_newline
;
extern
const
char
**
errmesg
;
/* Error messages */
extern
const
char
**
errmesg
;
/* Error messages */
extern
const
char
*
default_tx_isolation_name
;
extern
String
empty_string
;
extern
String
empty_string
;
extern
struct
show_var_st
init_vars
[];
extern
struct
show_var_st
init_vars
[];
extern
struct
show_var_st
status_vars
[];
extern
struct
show_var_st
status_vars
[];
...
...
sql/mysqld.cc
View file @
4ec76c1d
...
@@ -281,7 +281,9 @@ char server_version[SERVER_VERSION_LENGTH]=MYSQL_SERVER_VERSION;
...
@@ -281,7 +281,9 @@ char server_version[SERVER_VERSION_LENGTH]=MYSQL_SERVER_VERSION;
const
char
*
first_keyword
=
"first"
;
const
char
*
first_keyword
=
"first"
;
const
char
**
errmesg
;
/* Error messages */
const
char
**
errmesg
;
/* Error messages */
const
char
*
myisam_recover_options_str
=
"OFF"
;
const
char
*
myisam_recover_options_str
=
"OFF"
;
const
char
*
default_tx_isolation_name
;
enum_tx_isolation
default_tx_isolation
=
ISO_READ_COMMITTED
;
enum_tx_isolation
default_tx_isolation
=
ISO_READ_COMMITTED
;
#ifdef HAVE_GEMINI_DB
#ifdef HAVE_GEMINI_DB
const
char
*
gemini_recovery_options_str
=
"FULL"
;
const
char
*
gemini_recovery_options_str
=
"FULL"
;
#endif
#endif
...
@@ -2819,6 +2821,7 @@ struct show_var_st init_vars[]= {
...
@@ -2819,6 +2821,7 @@ struct show_var_st init_vars[]= {
{
"thread_concurrency"
,
(
char
*
)
&
concurrency
,
SHOW_LONG
},
{
"thread_concurrency"
,
(
char
*
)
&
concurrency
,
SHOW_LONG
},
#endif
#endif
{
"thread_stack"
,
(
char
*
)
&
thread_stack
,
SHOW_LONG
},
{
"thread_stack"
,
(
char
*
)
&
thread_stack
,
SHOW_LONG
},
{
"transaction_isolation"
,
(
char
*
)
&
default_tx_isolation_name
,
SHOW_CHAR_PTR
},
#ifdef HAVE_TZNAME
#ifdef HAVE_TZNAME
{
"timezone"
,
time_zone
,
SHOW_CHAR
},
{
"timezone"
,
time_zone
,
SHOW_CHAR
},
#endif
#endif
...
@@ -3672,6 +3675,7 @@ static void get_options(int argc,char **argv)
...
@@ -3672,6 +3675,7 @@ static void get_options(int argc,char **argv)
}
}
fix_paths
();
fix_paths
();
default_table_type_name
=
ha_table_typelib
.
type_names
[
default_table_type
-
1
];
default_table_type_name
=
ha_table_typelib
.
type_names
[
default_table_type
-
1
];
default_tx_isolation_name
=
tx_isolation_typelib
.
type_names
[
default_tx_isolation
];
}
}
...
...
sql/sql_insert.cc
View file @
4ec76c1d
...
@@ -168,7 +168,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
...
@@ -168,7 +168,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
table
->
time_stamp
=
save_time_stamp
;
table
->
time_stamp
=
save_time_stamp
;
goto
abort
;
goto
abort
;
}
}
if
(
setup_
tables
(
table_list
)
||
setup_
fields
(
thd
,
table_list
,
*
values
,
0
,
0
))
if
(
setup_fields
(
thd
,
table_list
,
*
values
,
0
,
0
))
{
{
table
->
time_stamp
=
save_time_stamp
;
table
->
time_stamp
=
save_time_stamp
;
goto
abort
;
goto
abort
;
...
...
sql/sql_parse.cc
View file @
4ec76c1d
...
@@ -1266,8 +1266,11 @@ mysql_execute_command(void)
...
@@ -1266,8 +1266,11 @@ mysql_execute_command(void)
}
}
if
(
tables
->
next
)
if
(
tables
->
next
)
{
{
TABLE_LIST
*
table
;
if
(
check_table_access
(
thd
,
SELECT_ACL
,
tables
->
next
))
if
(
check_table_access
(
thd
,
SELECT_ACL
,
tables
->
next
))
goto
error
;
// Error message is given
goto
error
;
// Error message is given
for
(
table
=
tables
->
next
;
table
;
table
=
table
->
next
)
table
->
lock_type
=
lex
->
lock_option
;
}
}
thd
->
offset_limit
=
lex
->
offset_limit
;
thd
->
offset_limit
=
lex
->
offset_limit
;
thd
->
select_limit
=
lex
->
select_limit
+
lex
->
offset_limit
;
thd
->
select_limit
=
lex
->
select_limit
+
lex
->
offset_limit
;
...
@@ -1539,17 +1542,19 @@ mysql_execute_command(void)
...
@@ -1539,17 +1542,19 @@ mysql_execute_command(void)
{
{
// Check that we have modify privileges for the first table and
// Check that we have modify privileges for the first table and
// select privileges for the rest
// select privileges for the rest
uint
privilege
=
(
lex
->
sql_command
==
SQLCOM_INSERT_SELECT
?
{
INSERT_ACL
:
INSERT_ACL
|
UPDATE_ACL
|
DELETE_ACL
);
uint
privilege
=
(
lex
->
sql_command
==
SQLCOM_INSERT_SELECT
?
TABLE_LIST
*
save_next
=
tables
->
next
;
INSERT_ACL
:
INSERT_ACL
|
UPDATE_ACL
|
DELETE_ACL
);
tables
->
next
=
0
;
TABLE_LIST
*
save_next
=
tables
->
next
;
if
(
check_access
(
thd
,
privilege
,
tables
->
next
=
0
;
tables
->
db
,
&
tables
->
grant
.
privilege
)
||
if
(
check_access
(
thd
,
privilege
,
(
grant_option
&&
check_grant
(
thd
,
privilege
,
tables
)))
tables
->
db
,
&
tables
->
grant
.
privilege
)
||
goto
error
;
(
grant_option
&&
check_grant
(
thd
,
privilege
,
tables
)))
tables
->
next
=
save_next
;
goto
error
;
if
((
res
=
check_table_access
(
thd
,
SELECT_ACL
,
save_next
)))
tables
->
next
=
save_next
;
goto
error
;
if
((
res
=
check_table_access
(
thd
,
SELECT_ACL
,
save_next
)))
goto
error
;
}
select_result
*
result
;
select_result
*
result
;
thd
->
offset_limit
=
lex
->
offset_limit
;
thd
->
offset_limit
=
lex
->
offset_limit
;
...
@@ -1563,6 +1568,11 @@ mysql_execute_command(void)
...
@@ -1563,6 +1568,11 @@ mysql_execute_command(void)
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
tables
->
lock_type
=
TL_WRITE
;
// update first table
tables
->
lock_type
=
TL_WRITE
;
// update first table
{
TABLE_LIST
*
table
;
for
(
table
=
tables
->
next
;
table
;
table
=
table
->
next
)
table
->
lock_type
=
lex
->
lock_option
;
}
if
(
!
(
res
=
open_and_lock_tables
(
thd
,
tables
)))
if
(
!
(
res
=
open_and_lock_tables
(
thd
,
tables
)))
{
{
if
((
result
=
new
select_insert
(
tables
->
table
,
&
lex
->
field_list
,
if
((
result
=
new
select_insert
(
tables
->
table
,
&
lex
->
field_list
,
...
...
sql/sql_yacc.yy
View file @
4ec76c1d
...
@@ -699,6 +699,7 @@ create3:
...
@@ -699,6 +699,7 @@ create3:
/* empty */ {}
/* empty */ {}
| opt_duplicate opt_as SELECT_SYM
| opt_duplicate opt_as SELECT_SYM
{
{
Lex->lock_option= TL_READ_NO_INSERT;
mysql_init_select(Lex);
mysql_init_select(Lex);
}
}
select_options select_item_list opt_select_from {}
select_options select_item_list opt_select_from {}
...
@@ -781,7 +782,7 @@ raid_types:
...
@@ -781,7 +782,7 @@ raid_types:
opt_select_from:
opt_select_from:
/* empty */
/* empty */
| select_from
| select_from
select_lock_type
udf_func_type:
udf_func_type:
/* empty */ { $$ = UDFTYPE_FUNCTION; }
/* empty */ { $$ = UDFTYPE_FUNCTION; }
...
@@ -2071,9 +2072,10 @@ insert_values:
...
@@ -2071,9 +2072,10 @@ insert_values:
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command = (lex->sql_command == SQLCOM_INSERT ?
lex->sql_command = (lex->sql_command == SQLCOM_INSERT ?
SQLCOM_INSERT_SELECT : SQLCOM_REPLACE_SELECT);
SQLCOM_INSERT_SELECT : SQLCOM_REPLACE_SELECT);
lex->lock_option= TL_READ_NO_INSERT;
mysql_init_select(lex);
mysql_init_select(lex);
}
}
select_options select_item_list select_from {}
select_options select_item_list select_from
select_lock_type
{}
values_list:
values_list:
values_list ',' no_braces
values_list ',' no_braces
...
@@ -2783,6 +2785,7 @@ set_isolation:
...
@@ -2783,6 +2785,7 @@ set_isolation:
if (check_process_priv())
if (check_process_priv())
YYABORT;
YYABORT;
default_tx_isolation= $2;
default_tx_isolation= $2;
default_tx_isolation_name=tx_isolation_typelib.type_names[default_tx_isolation];
}
}
| SESSION_SYM tx_isolation
| SESSION_SYM tx_isolation
{ current_thd->session_tx_isolation= Lex->tx_isolation= $2; }
{ current_thd->session_tx_isolation= Lex->tx_isolation= $2; }
...
...
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