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
c578350e
Commit
c578350e
authored
Jan 04, 2007
by
brian@zim.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge baker@bk-internal.mysql.com:/home/bk/mysql-5.1-arch
into zim.(none):/home/brian/mysql/merge-5.1
parents
9ffaf185
452a1331
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
132 additions
and
68 deletions
+132
-68
mysql-test/r/csv.result
mysql-test/r/csv.result
+21
-5
mysql-test/t/csv.test
mysql-test/t/csv.test
+15
-1
storage/csv/ha_tina.cc
storage/csv/ha_tina.cc
+96
-62
No files found.
mysql-test/r/csv.result
View file @
c578350e
...
...
@@ -5210,16 +5210,32 @@ create table bug22080_3 (id int,string varchar(64)) Engine=CSV;
insert into bug22080_1 values(1,'string');
insert into bug22080_1 values(2,'string');
insert into bug22080_1 values(3,'string');
"1"
,"string"
1
,"string"
2","string"
"3"
,"string"
3
,"string"
check table bug22080_2;
Table Op Msg_type Msg_text
test.bug22080_2 check error Corrupt
"1"
,"string"
"2",
string"
"3"
,"string"
1
,"string"
2,"
string"
3
,"string"
check table bug22080_3;
Table Op Msg_type Msg_text
test.bug22080_3 check error Corrupt
drop tables bug22080_1,bug22080_2,bug22080_3;
create table float_test (id float,string varchar(64)) Engine=CSV;
insert into float_test values(1.0,'string');
insert into float_test values(2.23,'serg.g');
insert into float_test values(0.03,'string');
insert into float_test values(0.19,'string');
insert into float_test values(.67,'string');
insert into float_test values(9.67,'string');
select * from float_test;
id string
1 string
2.23 serg.g
0.03 string
0.19 string
0.67 string
9.67 string
drop table float_test;
mysql-test/t/csv.test
View file @
c578350e
...
...
@@ -1595,7 +1595,7 @@ insert into bug22080_1 values(2,'string');
insert
into
bug22080_1
values
(
3
,
'string'
);
# Currupt the file as described in the bug report
--
exec
sed
-
e
's/
"2"
/2"/'
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_1
.
CSV
>
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_2
.
CSV
--
exec
sed
-
e
's/
2
/2"/'
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_1
.
CSV
>
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_2
.
CSV
--
exec
sed
-
e
's/2","/2",/'
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_1
.
CSV
>
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_3
.
CSV
--
exec
cat
$MYSQLTEST_VARDIR
/
master
-
data
/
test
/
bug22080_2
.
CSV
...
...
@@ -1605,3 +1605,17 @@ check table bug22080_2;
check
table
bug22080_3
;
drop
tables
bug22080_1
,
bug22080_2
,
bug22080_3
;
#
# Testing float type
#
create
table
float_test
(
id
float
,
string
varchar
(
64
))
Engine
=
CSV
;
insert
into
float_test
values
(
1.0
,
'string'
);
insert
into
float_test
values
(
2.23
,
'serg.g'
);
insert
into
float_test
values
(
0.03
,
'string'
);
insert
into
float_test
values
(
0.19
,
'string'
);
insert
into
float_test
values
(
.
67
,
'string'
);
insert
into
float_test
values
(
9.67
,
'string'
);
select
*
from
float_test
;
drop
table
float_test
;
storage/csv/ha_tina.cc
View file @
c578350e
...
...
@@ -462,6 +462,7 @@ int ha_tina::encode_quote(byte *buf)
my_bitmap_map
*
org_bitmap
=
dbug_tmp_use_all_columns
(
table
,
table
->
read_set
);
buffer
.
length
(
0
);
for
(
Field
**
field
=
table
->
field
;
*
field
;
field
++
)
{
const
char
*
ptr
;
...
...
@@ -478,50 +479,58 @@ int ha_tina::encode_quote(byte *buf)
buffer
.
append
(
STRING_WITH_LEN
(
"
\"\"
,"
));
continue
;
}
else
(
*
field
)
->
val_str
(
&
attribute
,
&
attribute
);
if
((
*
field
)
->
str_needs_quotes
())
{
(
*
field
)
->
val_str
(
&
attribute
,
&
attribute
);
ptr
=
attribute
.
ptr
();
end_ptr
=
attribute
.
length
()
+
ptr
;
}
buffer
.
append
(
'"'
);
buffer
.
append
(
'"'
);
while
(
ptr
<
end_ptr
)
{
if
(
*
ptr
==
'"'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'"'
);
*
ptr
++
;
}
else
if
(
*
ptr
==
'\r'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'r'
);
*
ptr
++
;
}
else
if
(
*
ptr
==
'\\'
)
while
(
ptr
<
end_ptr
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'\\'
);
*
ptr
++
;
}
else
if
(
*
ptr
==
'\n'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'n'
);
*
ptr
++
;
if
(
*
ptr
==
'"'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'"'
);
*
ptr
++
;
}
else
if
(
*
ptr
==
'\r'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'r'
);
*
ptr
++
;
}
else
if
(
*
ptr
==
'\\'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'\\'
);
*
ptr
++
;
}
else
if
(
*
ptr
==
'\n'
)
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
'n'
);
*
ptr
++
;
}
else
buffer
.
append
(
*
ptr
++
);
}
else
buffer
.
append
(
*
ptr
++
);
buffer
.
append
(
'"'
);
}
else
{
buffer
.
append
(
attribute
);
}
buffer
.
append
(
'"'
);
buffer
.
append
(
','
);
}
// Remove the comma, add a line feed
buffer
.
length
(
buffer
.
length
()
-
1
);
buffer
.
append
(
'\n'
);
//buffer.replace(buffer.length(), 0, "\n", 1);
dbug_tmp_restore_column_map
(
table
->
read_set
,
org_bitmap
);
...
...
@@ -601,47 +610,72 @@ int ha_tina::find_current_row(byte *buf)
buffer
.
length
(
0
);
if
(
curr_offset
<
end_offset
&&
file_buff
->
get_value
(
curr_offset
)
==
'"'
)
curr_offset
++
;
// Incrementpast the first quote
else
goto
err
;
for
(;
curr_offset
<
end_offset
;
curr_offset
++
)
{
// Need to convert line feeds!
if
(
file_buff
->
get_value
(
curr_offset
)
==
'"'
&&
((
file_buff
->
get_value
(
curr_offset
+
1
)
==
','
)
||
(
curr_offset
==
end_offset
-
1
)))
{
curr_offset
+=
2
;
// Move past the , and the "
break
;
}
if
(
file_buff
->
get_value
(
curr_offset
)
==
'\\'
&&
curr_offset
!=
(
end_offset
-
1
))
curr_offset
++
;
// Incrementpast the first quote
for
(;
curr_offset
<
end_offset
;
curr_offset
++
)
{
curr_offset
++
;
if
(
file_buff
->
get_value
(
curr_offset
)
==
'r'
)
buffer
.
append
(
'\r'
);
else
if
(
file_buff
->
get_value
(
curr_offset
)
==
'n'
)
buffer
.
append
(
'\n'
);
else
if
((
file_buff
->
get_value
(
curr_offset
)
==
'\\'
)
||
(
file_buff
->
get_value
(
curr_offset
)
==
'"'
))
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
else
/* This could only happed with an externally created file */
// Need to convert line feeds!
if
(
file_buff
->
get_value
(
curr_offset
)
==
'"'
&&
((
file_buff
->
get_value
(
curr_offset
+
1
)
==
','
)
||
(
curr_offset
==
end_offset
-
1
)))
{
buffer
.
append
(
'\\'
);
curr_offset
+=
2
;
// Move past the , and the "
break
;
}
if
(
file_buff
->
get_value
(
curr_offset
)
==
'\\'
&&
curr_offset
!=
(
end_offset
-
1
))
{
curr_offset
++
;
if
(
file_buff
->
get_value
(
curr_offset
)
==
'r'
)
buffer
.
append
(
'\r'
);
else
if
(
file_buff
->
get_value
(
curr_offset
)
==
'n'
)
buffer
.
append
(
'\n'
);
else
if
((
file_buff
->
get_value
(
curr_offset
)
==
'\\'
)
||
(
file_buff
->
get_value
(
curr_offset
)
==
'"'
))
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
else
/* This could only happed with an externally created file */
{
buffer
.
append
(
'\\'
);
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
}
}
else
// ordinary symbol
{
/*
We are at final symbol and no last quote was found =>
we are working with a damaged file.
*/
if
(
curr_offset
==
end_offset
-
1
)
goto
err
;
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
}
}
else
// ordinary symbol
}
else
if
(
my_isdigit
(
system_charset_info
,
file_buff
->
get_value
(
curr_offset
)))
{
for
(;
curr_offset
<
end_offset
;
curr_offset
++
)
{
/*
We are at final symbol and no last quote was found =>
we are working with a damaged file.
*/
if
(
curr_offset
==
end_offset
-
1
)
if
(
file_buff
->
get_value
(
curr_offset
)
==
','
)
{
curr_offset
+=
1
;
// Move past the ,
break
;
}
if
(
my_isdigit
(
system_charset_info
,
file_buff
->
get_value
(
curr_offset
)))
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
else
if
(
file_buff
->
get_value
(
curr_offset
)
==
'.'
)
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
else
goto
err
;
buffer
.
append
(
file_buff
->
get_value
(
curr_offset
));
}
}
else
{
goto
err
;
}
if
(
bitmap_is_set
(
table
->
read_set
,
(
*
field
)
->
field_index
))
(
*
field
)
->
store
(
buffer
.
ptr
(),
buffer
.
length
(),
system_charset_info
);
}
...
...
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