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
160541b5
Commit
160541b5
authored
Jan 27, 2005
by
ingo@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/home/mydev/mysql-5.0
into mysql.com:/home/mydev/mysql-5.0-5000
parents
00807cb0
670a2934
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
516 additions
and
173 deletions
+516
-173
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+1
-0
mysql-test/include/have_federated_db.inc
mysql-test/include/have_federated_db.inc
+1
-1
mysql-test/r/federated.result
mysql-test/r/federated.result
+114
-5
mysql-test/r/have_federated_db.require
mysql-test/r/have_federated_db.require
+1
-1
mysql-test/t/federated.test
mysql-test/t/federated.test
+96
-8
sql/field.cc
sql/field.cc
+109
-0
sql/field.h
sql/field.h
+2
-0
sql/ha_federated.cc
sql/ha_federated.cc
+146
-150
sql/ha_federated.h
sql/ha_federated.h
+3
-5
sql/mysql_priv.h
sql/mysql_priv.h
+4
-0
sql/set_var.cc
sql/set_var.cc
+1
-1
sql/sql_analyse.cc
sql/sql_analyse.cc
+38
-2
No files found.
BitKeeper/etc/logging_ok
View file @
160541b5
...
...
@@ -172,6 +172,7 @@ nick@nick.leippe.com
papa@gbichot.local
patg@krsna.patg.net
patg@patrick-galbraiths-computer.local
patg@pc248.lfp.kcls.org
paul@central.snake.net
paul@frost.snake.net
paul@ice.local
...
...
mysql-test/include/have_federated_db.inc
View file @
160541b5
--
require
r
/
have_federated_db
.
require
disable_query_log
;
show
variables
like
"have_federated_
db
"
;
show
variables
like
"have_federated_
engine
"
;
enable_query_log
;
mysql-test/r/federated.result
View file @
160541b5
This diff is collapsed.
Click to expand it.
mysql-test/r/have_federated_db.require
View file @
160541b5
Variable_name Value
have_federated_
db
YES
have_federated_
engine
YES
mysql-test/t/federated.test
View file @
160541b5
...
...
@@ -68,12 +68,14 @@ select * from federated.t1 where id = 5;
delete
from
federated
.
t1
;
select
*
from
federated
.
t1
where
id
=
5
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`name`
varchar
(
32
),
`other`
varchar
(
20
),
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
connection
slave
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`name`
varchar
(
32
),
`other`
varchar
(
20
),
PRIMARY
KEY
(
`id`
)
);
connection
master
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`name`
varchar
(
32
),
`other`
varchar
(
20
),
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
insert
into
federated
.
t1
(
name
,
other
)
values
(
'First Name'
,
11111
);
insert
into
federated
.
t1
(
name
,
other
)
values
(
'Second Name'
,
NULL
);
insert
into
federated
.
t1
(
name
,
other
)
values
(
'Third Name'
,
33333
);
...
...
@@ -90,19 +92,78 @@ select * from federated.t1 where name IS NULL;
select
*
from
federated
.
t1
where
name
IS
NULL
and
other
IS
NULL
;
select
*
from
federated
.
t1
where
name
IS
NULL
or
other
IS
NULL
;
update
federated
.
t1
set
name
=
'Fourth Name'
,
other
=
'four four four'
where
name
IS
NULL
and
other
IS
NULL
;
update
federated
.
t1
set
other
=
'two two two two'
where
name
=
'Sec
e
nd Name'
;
update
federated
.
t1
set
other
=
'two two two two'
where
name
=
'Sec
o
nd Name'
;
update
federated
.
t1
set
other
=
'seven seven'
where
name
like
'Sec%'
;
update
federated
.
t1
set
other
=
'seven seven'
where
name
=
'Seventh Name'
;
update
federated
.
t1
set
name
=
'Tenth Name'
where
other
like
'fee fie%'
;
select
*
from
federated
.
t1
where
name
IS
NULL
or
other
IS
NULL
;
select
*
from
federated
.
t1
;
# test multi-keys
connection
slave
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
id
int
,
name
varchar
(
32
),
floatval
float
,
other
int
)
DEFAULT
CHARSET
=
latin1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`name`
varchar
(
32
)
NOT
NULL
DEFAULT
''
,
`other`
varchar
(
20
)
NOT
NULL
DEFAULT
''
,
PRIMARY
KEY
(
`id`
),
key
nameoth
(
name
,
other
)
);
connection
master
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`name`
varchar
(
32
)
NOT
NULL
DEFAULT
''
,
`other`
varchar
(
20
)
NOT
NULL
DEFAULT
''
,
PRIMARY
KEY
(
`id`
),
key
nameoth
(
name
,
other
))
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
insert
into
federated
.
t1
(
name
,
other
)
values
(
'First Name'
,
'1111'
);
insert
into
federated
.
t1
(
name
,
other
)
values
(
'Second Name'
,
'2222'
);
insert
into
federated
.
t1
(
name
,
other
)
values
(
'Third Name'
,
'3333'
);
select
*
from
federated
.
t1
where
name
=
'Second Name'
;
select
*
from
federated
.
t1
where
other
=
'2222'
;
select
*
from
federated
.
t1
where
name
=
'Third Name'
;
select
*
from
federated
.
t1
where
name
=
'Third Name'
and
other
=
'3333'
;
connection
slave
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
id
int
NOT
NULL
auto_increment
,
name
char
(
32
)
NOT
NULL
DEFAULT
''
,
bincol
binary
(
4
)
NOT
NULL
,
floatval
decimal
(
5
,
2
)
NOT
NULL
DEFAULT
0.0
,
other
int
NOT
NULL
DEFAULT
0
,
primary
key
(
id
),
key
nameoth
(
name
,
other
),
key
bincol
(
bincol
),
key
floatval
(
floatval
));
# test other types of indexes
connection
master
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
id
int
NOT
NULL
auto_increment
,
name
char
(
32
)
NOT
NULL
DEFAULT
''
,
bincol
binary
(
4
)
NOT
NULL
,
floatval
decimal
(
5
,
2
)
NOT
NULL
DEFAULT
0.0
,
other
int
NOT
NULL
DEFAULT
0
,
primary
key
(
id
),
key
nameoth
(
name
,
other
),
key
bincol
(
bincol
),
key
floatval
(
floatval
))
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
insert
into
federated
.
t1
(
name
,
bincol
,
floatval
,
other
)
values
(
'first'
,
0x65
,
11.11
,
1111
);
insert
into
federated
.
t1
(
name
,
bincol
,
floatval
,
other
)
values
(
'second'
,
0x66
,
22.22
,
2222
);
insert
into
federated
.
t1
(
name
,
bincol
,
floatval
,
other
)
values
(
'third'
,
'g'
,
22.22
,
2222
);
select
*
from
federated
.
t1
;
select
*
from
federated
.
t1
where
name
=
'second'
;
select
*
from
federated
.
t1
where
bincol
=
'f'
;
select
*
from
federated
.
t1
where
bincol
=
0x66
;
select
*
from
federated
.
t1
where
bincol
=
0x67
;
select
*
from
federated
.
t1
where
bincol
=
'g'
;
select
*
from
federated
.
t1
where
floatval
=
11.11
;
select
*
from
federated
.
t1
where
name
=
'third'
;
select
*
from
federated
.
t1
where
other
=
2222
;
select
*
from
federated
.
t1
where
name
=
'third'
and
other
=
2222
;
# test NULLs
connection
slave
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
id
int
,
name
varchar
(
32
),
floatval
float
,
other
int
)
DEFAULT
CHARSET
=
latin1
;
connection
master
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
id
int
,
name
varchar
(
32
),
floatval
float
,
other
int
)
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
# these both should be the same
...
...
@@ -452,15 +513,17 @@ select * from federated.t1;
connection
slave
;
drop
table
if
exists
federated
.
t1
;
create
table
federated
.
t1
(
id
int
NOT
NULL
auto_increment
,
code
char
(
20
)
NOT
NULL
,
fileguts
blob
,
creation_date
datetime
,
entered_time
datetime
default
'2004-04-04 04:04:04'
,
primary
key
(
id
),
index
(
code
))
DEFAULT
CHARSET
=
latin1
;
create
table
federated
.
t1
(
id
int
NOT
NULL
auto_increment
,
code
char
(
20
)
NOT
NULL
,
fileguts
blob
NOT
NULL
,
creation_date
datetime
,
entered_time
datetime
default
'2004-04-04 04:04:04'
,
primary
key
(
id
),
index
(
code
),
index
(
fileguts
(
10
)
))
DEFAULT
CHARSET
=
latin1
;
connection
master
;
drop
table
if
exists
federated
.
t1
;
create
table
federated
.
t1
(
id
int
NOT
NULL
auto_increment
,
code
char
(
20
)
NOT
NULL
,
fileguts
blob
,
creation_date
datetime
,
entered_time
datetime
default
'2004-04-04 04:04:04'
,
primary
key
(
id
),
index
(
code
))
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
create
table
federated
.
t1
(
id
int
NOT
NULL
auto_increment
,
code
char
(
20
)
NOT
NULL
,
fileguts
blob
NOT
NULL
,
creation_date
datetime
,
entered_time
datetime
default
'2004-04-04 04:04:04'
,
primary
key
(
id
),
index
(
code
),
index
(
fileguts
(
10
)
))
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
insert
into
federated
.
t1
(
code
,
fileguts
,
creation_date
)
values
(
'ASDFWERQWETWETAWETA'
,
'*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[['
,
'2003-03-03 03:03:03'
);
insert
into
federated
.
t1
(
code
,
fileguts
,
creation_date
)
values
(
'DEUEUEUEUEUEUEUEUEU'
,
'*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[['
,
'2004-04-04 04:04:04'
);
insert
into
federated
.
t1
(
code
,
fileguts
,
creation_date
)
values
(
'DEUEUEUEUEUEUEUEUEU'
,
'jimbob'
,
'2004-04-04 04:04:04'
);
select
*
from
federated
.
t1
;
drop
table
if
exists
federated
.
t1
;
select
*
from
federated
.
t1
where
fileguts
=
'jimbob'
;
# test blob indexes
# TODO
#
...
...
@@ -490,11 +553,36 @@ drop table if exists federated.t1;
# drop table if exists federated.t1;
#
# test joins with non-federated table
connection
slave
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`country_id`
int
(
20
)
NOT
NULL
DEFAULT
0
,
`name`
varchar
(
32
),
`other`
varchar
(
20
),
PRIMARY
KEY
(
`id`
),
key
(
country_id
));
connection
master
;
drop
table
if
exists
federated
.
t1
;
CREATE
TABLE
federated
.
t1
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`country_id`
int
(
20
)
NOT
NULL
DEFAULT
0
,
`name`
varchar
(
32
),
`other`
varchar
(
20
),
PRIMARY
KEY
(
`id`
),
key
(
country_id
)
)
ENGINE
=
"FEDERATED"
DEFAULT
CHARSET
=
latin1
COMMENT
=
'mysql://root@127.0.0.1:9308/federated/t1'
;
insert
into
federated
.
t1
(
name
,
country_id
,
other
)
values
(
'Kumar'
,
1
,
11111
);
insert
into
federated
.
t1
(
name
,
country_id
,
other
)
values
(
'Lenz'
,
2
,
22222
);
insert
into
federated
.
t1
(
name
,
country_id
,
other
)
values
(
'Marizio'
,
3
,
33333
);
insert
into
federated
.
t1
(
name
,
country_id
,
other
)
values
(
'Monty'
,
4
,
33333
);
insert
into
federated
.
t1
(
name
,
country_id
,
other
)
values
(
'Sanja'
,
5
,
33333
);
drop
table
if
exists
federated
.
countries
;
CREATE
TABLE
federated
.
countries
(
`id`
int
(
20
)
NOT
NULL
auto_increment
,
`country`
varchar
(
32
),
primary
key
(
id
));
insert
into
federated
.
countries
(
country
)
values
(
'India'
);
insert
into
federated
.
countries
(
country
)
values
(
'Germany'
);
insert
into
federated
.
countries
(
country
)
values
(
'Italy'
);
insert
into
federated
.
countries
(
country
)
values
(
'Finland'
);
insert
into
federated
.
countries
(
country
)
values
(
'Ukraine'
);
select
federated
.
t1
.*
,
federated
.
countries
.
country
from
federated
.
t1
left
join
federated
.
countries
on
federated
.
t1
.
country_id
=
federated
.
countries
.
id
;
drop
table
federated
.
countries
;
connection
master
;
--
disable_warnings
drop
table
if
exists
federated
.
t1
;
drop
database
if
exists
federated
;
--
enable_warnings
...
...
sql/field.cc
View file @
160541b5
...
...
@@ -524,6 +524,115 @@ Field *Field::new_key_field(MEM_ROOT *root, struct st_table *new_table,
return
tmp
;
}
/*
SYNOPSIS
Field::quote_data()
unquoted_string Pointer pointing to the value of a field
DESCRIPTION
Simple method that passes the field type to the method "type_quote"
To get a true/false value as to whether the value in string1 needs
to be enclosed with quotes. This ensures that values in the final
sql statement to be passed to the remote server will be quoted properly
RETURN_VALUE
void Immediately - if string doesn't need quote
void Upon prepending/appending quotes on each side of variable
*/
bool
Field
::
quote_data
(
String
*
unquoted_string
)
{
char
escaped_string
[
IO_SIZE
];
char
*
unquoted_string_buffer
=
(
char
*
)(
unquoted_string
->
ptr
());
uint
need_quotes
;
DBUG_ENTER
(
"Field::quote_data"
);
// this is the same call that mysql_real_escape_string() calls
escape_string_for_mysql
(
&
my_charset_bin
,
(
char
*
)
escaped_string
,
unquoted_string
->
ptr
(),
unquoted_string
->
length
());
if
(
is_null
())
DBUG_RETURN
(
0
);
need_quotes
=
needs_quotes
();
if
(
need_quotes
==
0
)
{
DBUG_RETURN
(
0
);
}
else
{
// reset string, then re-append with quotes and escaped values
unquoted_string
->
length
(
0
);
if
(
unquoted_string
->
append
(
"'"
))
DBUG_RETURN
(
1
);
if
(
unquoted_string
->
append
((
char
*
)
escaped_string
))
DBUG_RETURN
(
1
);
if
(
unquoted_string
->
append
(
"'"
))
DBUG_RETURN
(
1
);
}
//DBUG_PRINT("Field::quote_data",
// ("FINAL quote_flag %d unquoted_string %s escaped_string %s",
//needs_quotes, unquoted_string->c_ptr_quick(), escaped_string));
DBUG_RETURN
(
0
);
}
/*
Quote a field type if needed
SYNOPSIS
Field::type_quote
DESCRIPTION
Simple method to give true/false whether a field should be quoted.
Used when constructing INSERT and UPDATE queries to the remote server
see write_row and update_row
RETURN VALUE
0 if value is of type NOT needing quotes
1 if value is of type needing quotes
*/
bool
Field
::
needs_quotes
(
void
)
{
DBUG_ENTER
(
"Field::type_quote"
);
switch
(
type
())
{
//FIX this when kernel is fixed
case
MYSQL_TYPE_VARCHAR
:
case
FIELD_TYPE_STRING
:
case
FIELD_TYPE_VAR_STRING
:
case
FIELD_TYPE_YEAR
:
case
FIELD_TYPE_NEWDATE
:
case
FIELD_TYPE_TIME
:
case
FIELD_TYPE_TIMESTAMP
:
case
FIELD_TYPE_DATE
:
case
FIELD_TYPE_DATETIME
:
case
FIELD_TYPE_TINY_BLOB
:
case
FIELD_TYPE_BLOB
:
case
FIELD_TYPE_MEDIUM_BLOB
:
case
FIELD_TYPE_LONG_BLOB
:
case
FIELD_TYPE_GEOMETRY
:
DBUG_RETURN
(
1
);
case
FIELD_TYPE_DECIMAL
:
case
FIELD_TYPE_TINY
:
case
FIELD_TYPE_SHORT
:
case
FIELD_TYPE_INT24
:
case
FIELD_TYPE_LONG
:
case
FIELD_TYPE_FLOAT
:
case
FIELD_TYPE_DOUBLE
:
case
FIELD_TYPE_LONGLONG
:
case
FIELD_TYPE_NULL
:
case
FIELD_TYPE_SET
:
case
FIELD_TYPE_ENUM
:
DBUG_RETURN
(
0
);
default:
DBUG_RETURN
(
0
);
}
DBUG_RETURN
(
0
);
}
/****************************************************************************
Field_null, a field that always return NULL
...
...
sql/field.h
View file @
160541b5
...
...
@@ -228,6 +228,8 @@ class Field
ptr
=
old_ptr
;
return
str
;
}
bool
quote_data
(
String
*
unquoted_string
);
bool
needs_quotes
(
void
);
virtual
bool
send_binary
(
Protocol
*
protocol
);
virtual
char
*
pack
(
char
*
to
,
const
char
*
from
,
uint
max_length
=~
(
uint
)
0
)
{
...
...
sql/ha_federated.cc
View file @
160541b5
This diff is collapsed.
Click to expand it.
sql/ha_federated.h
View file @
160541b5
...
...
@@ -71,10 +71,8 @@ class ha_federated: public handler
return 0 on success
return errorcode otherwise
*/
//FIX
uint
convert_row_to_internal_format
(
byte
*
buf
,
MYSQL_ROW
row
);
uint
type_quote
(
int
type
);
void
quote_data
(
String
*
string1
,
Field
*
field
);
bool
ha_federated
::
create_where_from_key
(
String
*
to
,
KEY
*
key_info
,
const
byte
*
key
,
uint
key_length
);
public:
ha_federated
(
TABLE
*
table
)
:
handler
(
table
),
...
...
@@ -104,7 +102,7 @@ class ha_federated: public handler
{
return
(
HA_TABLE_SCAN_ON_INDEX
|
HA_NOT_EXACT_COUNT
|
HA_PRIMARY_KEY_IN_READ_INDEX
|
HA_FILE_BASED
|
HA_AUTO_PART_KEY
|
HA_TABLE_SCAN_ON_INDEX
);
HA_TABLE_SCAN_ON_INDEX
|
HA_CAN_INDEX_BLOBS
);
}
/*
This is a bitmap of flags that says how the storage engine
...
...
@@ -132,7 +130,7 @@ class ha_federated: public handler
/*
The next method will never be called if you do not implement indexes.
*/
virtual
double
read_time
(
ha_rows
rows
)
{
return
(
double
)
rows
/
20.0
+
1
;
}
virtual
double
read_time
(
uint
index
,
uint
ranges
,
ha_rows
rows
)
{
return
(
double
)
rows
/
20.0
+
1
;
}
/*
Everything below are methods that we implment in ha_federated.cc.
...
...
sql/mysql_priv.h
View file @
160541b5
...
...
@@ -712,6 +712,10 @@ void free_des_key_file();
/* sql_do.cc */
bool
mysql_do
(
THD
*
thd
,
List
<
Item
>
&
values
);
/* sql_analyse.h */
bool
append_escaped
(
String
*
to_str
,
String
*
from_str
);
bool
append_escaped
(
String
*
to_str
,
char
*
from
,
uint
from_len
);
/* sql_show.cc */
bool
mysqld_show_open_tables
(
THD
*
thd
,
const
char
*
wild
);
bool
mysqld_show_logs
(
THD
*
thd
);
...
...
sql/set_var.cc
View file @
160541b5
...
...
@@ -733,7 +733,7 @@ struct show_var_st init_vars[]= {
{
"have_crypt"
,
(
char
*
)
&
have_crypt
,
SHOW_HAVE
},
{
"have_csv"
,
(
char
*
)
&
have_csv_db
,
SHOW_HAVE
},
{
"have_example_engine"
,
(
char
*
)
&
have_example_db
,
SHOW_HAVE
},
{
"have_federated_
db"
,
(
char
*
)
&
have_federated_db
,
SHOW_HAVE
},
{
"have_federated_
engine"
,
(
char
*
)
&
have_federated_db
,
SHOW_HAVE
},
{
"have_geometry"
,
(
char
*
)
&
have_geometry
,
SHOW_HAVE
},
{
"have_innodb"
,
(
char
*
)
&
have_innodb
,
SHOW_HAVE
},
{
"have_isam"
,
(
char
*
)
&
have_isam
,
SHOW_HAVE
},
...
...
sql/sql_analyse.cc
View file @
160541b5
...
...
@@ -59,7 +59,8 @@ int compare_ulonglong2(void* cmp_arg __attribute__((unused)),
return
compare_ulonglong
(
s
,
t
);
}
static
bool
append_escaped
(
String
*
to_str
,
String
*
from_str
);
bool
append_escaped
(
String
*
to_str
,
String
*
from_str
);
bool
append_escaped
(
String
*
to_str
,
char
*
from
,
uint
from_len
);
Procedure
*
proc_analyse_init
(
THD
*
thd
,
ORDER
*
param
,
select_result
*
result
,
...
...
@@ -1052,7 +1053,7 @@ uint check_ulonglong(const char *str, uint length)
1 Out of memory
*/
static
bool
append_escaped
(
String
*
to_str
,
String
*
from_str
)
bool
append_escaped
(
String
*
to_str
,
String
*
from_str
)
{
char
*
from
,
*
end
,
c
;
...
...
@@ -1086,3 +1087,38 @@ static bool append_escaped(String *to_str, String *from_str)
}
return
0
;
}
bool
append_escaped
(
String
*
to_str
,
char
*
from
,
uint
from_len
)
{
char
*
end
,
c
;
if
(
to_str
->
realloc
(
to_str
->
length
()
+
from_len
))
return
1
;
end
=
from
+
from_len
;
for
(;
from
<
end
;
from
++
)
{
c
=
*
from
;
switch
(
c
)
{
case
'\0'
:
c
=
'0'
;
break
;
case
'\032'
:
c
=
'Z'
;
break
;
case
'\\'
:
case
'\''
:
break
;
default:
goto
normal_character
;
}
if
(
to_str
->
append
(
'\\'
))
return
1
;
normal_character:
if
(
to_str
->
append
(
c
))
return
1
;
}
return
0
;
}
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