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
77817bce
Commit
77817bce
authored
Apr 04, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal:/home/bk/mysql-4.1
into mysql.com:/home/jimw/my/mysql-4.1-clean
parents
d73a1c23
120a04e0
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
38 additions
and
19 deletions
+38
-19
sql/ha_innodb.cc
sql/ha_innodb.cc
+38
-19
No files found.
sql/ha_innodb.cc
View file @
77817bce
...
@@ -1923,8 +1923,11 @@ inline
...
@@ -1923,8 +1923,11 @@ inline
ulint
ulint
get_innobase_type_from_mysql_type
(
get_innobase_type_from_mysql_type
(
/*==============================*/
/*==============================*/
/* out: DATA_BINARY, DATA_VARCHAR, ... */
/* out: DATA_BINARY, DATA_VARCHAR, ... */
Field
*
field
)
/* in: MySQL field */
ulint
*
unsigned_flag
,
/* out: DATA_UNSIGNED if an 'unsigned type';
at least ENUM and SET, and unsigned integer
types are 'unsigned types' */
Field
*
field
)
/* in: MySQL field */
{
{
/* The following asserts try to check that the MySQL type code fits in
/* The following asserts try to check that the MySQL type code fits in
8 bits: this is used in ibuf and also when DATA_NOT_NULL is ORed to
8 bits: this is used in ibuf and also when DATA_NOT_NULL is ORed to
...
@@ -1936,6 +1939,27 @@ get_innobase_type_from_mysql_type(
...
@@ -1936,6 +1939,27 @@ get_innobase_type_from_mysql_type(
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_FLOAT
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_FLOAT
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_DECIMAL
<
256
);
DBUG_ASSERT
((
ulint
)
FIELD_TYPE_DECIMAL
<
256
);
if
(
field
->
flags
&
UNSIGNED_FLAG
)
{
*
unsigned_flag
=
DATA_UNSIGNED
;
}
else
{
*
unsigned_flag
=
0
;
}
if
(
field
->
real_type
()
==
FIELD_TYPE_ENUM
||
field
->
real_type
()
==
FIELD_TYPE_SET
)
{
/* MySQL has field->type() a string type for these, but the
data is actually internally stored as an unsigned integer
code! */
*
unsigned_flag
=
DATA_UNSIGNED
;
/* MySQL has its own unsigned
flag set to zero, even though
internally this is an unsigned
integer type */
return
(
DATA_INT
);
}
switch
(
field
->
type
())
{
switch
(
field
->
type
())
{
/* NOTE that we only allow string types in DATA_MYSQL
/* NOTE that we only allow string types in DATA_MYSQL
and DATA_VARMYSQL */
and DATA_VARMYSQL */
...
@@ -1968,8 +1992,6 @@ get_innobase_type_from_mysql_type(
...
@@ -1968,8 +1992,6 @@ get_innobase_type_from_mysql_type(
case
FIELD_TYPE_DATETIME
:
case
FIELD_TYPE_DATETIME
:
case
FIELD_TYPE_YEAR
:
case
FIELD_TYPE_YEAR
:
case
FIELD_TYPE_NEWDATE
:
case
FIELD_TYPE_NEWDATE
:
case
FIELD_TYPE_ENUM
:
case
FIELD_TYPE_SET
:
case
FIELD_TYPE_TIME
:
case
FIELD_TYPE_TIME
:
case
FIELD_TYPE_TIMESTAMP
:
case
FIELD_TYPE_TIMESTAMP
:
return
(
DATA_INT
);
return
(
DATA_INT
);
...
@@ -2247,10 +2269,11 @@ build_template(
...
@@ -2247,10 +2269,11 @@ build_template(
get_field_offset
(
table
,
field
);
get_field_offset
(
table
,
field
);
templ
->
mysql_col_len
=
(
ulint
)
field
->
pack_length
();
templ
->
mysql_col_len
=
(
ulint
)
field
->
pack_length
();
templ
->
type
=
get_innobase_type_from_mysql_type
(
field
);
templ
->
type
=
index
->
table
->
cols
[
i
].
type
.
mtype
;
templ
->
is_unsigned
=
index
->
table
->
cols
[
i
].
type
.
prtype
&
DATA_UNSIGNED
;
templ
->
charset
=
dtype_get_charset_coll_noninline
(
templ
->
charset
=
dtype_get_charset_coll_noninline
(
index
->
table
->
cols
[
i
].
type
.
prtype
);
index
->
table
->
cols
[
i
].
type
.
prtype
);
templ
->
is_unsigned
=
(
ulint
)
(
field
->
flags
&
UNSIGNED_FLAG
);
if
(
templ
->
type
==
DATA_BLOB
)
{
if
(
templ
->
type
==
DATA_BLOB
)
{
prebuilt
->
templ_contains_blob
=
TRUE
;
prebuilt
->
templ_contains_blob
=
TRUE
;
...
@@ -2676,9 +2699,9 @@ calc_row_difference(
...
@@ -2676,9 +2699,9 @@ calc_row_difference(
o_len
=
field
->
pack_length
();
o_len
=
field
->
pack_length
();
n_len
=
field
->
pack_length
();
n_len
=
field
->
pack_length
();
col_type
=
get_innobase_type_from_mysql_type
(
field
)
;
col_type
=
prebuilt
->
table
->
cols
[
i
].
type
.
mtype
;
is_unsigned
=
(
ulint
)
(
field
->
flags
&
UNSIGNED_FLAG
);
is_unsigned
=
prebuilt
->
table
->
cols
[
i
].
type
.
prtype
&
DATA_UNSIGNED
;
switch
(
col_type
)
{
switch
(
col_type
)
{
case
DATA_BLOB
:
case
DATA_BLOB
:
...
@@ -2720,8 +2743,7 @@ calc_row_difference(
...
@@ -2720,8 +2743,7 @@ calc_row_difference(
(
mysql_byte
*
)
n_ptr
,
n_len
,
col_type
,
(
mysql_byte
*
)
n_ptr
,
n_len
,
col_type
,
is_unsigned
);
is_unsigned
);
ufield
->
exp
=
NULL
;
ufield
->
exp
=
NULL
;
ufield
->
field_no
=
ufield
->
field_no
=
prebuilt
->
table
->
cols
[
i
].
clust_pos
;
(
prebuilt
->
table
->
cols
+
i
)
->
clust_pos
;
n_changed
++
;
n_changed
++
;
}
}
}
}
...
@@ -3546,19 +3568,14 @@ create_table_def(
...
@@ -3546,19 +3568,14 @@ create_table_def(
for
(
i
=
0
;
i
<
n_cols
;
i
++
)
{
for
(
i
=
0
;
i
<
n_cols
;
i
++
)
{
field
=
form
->
field
[
i
];
field
=
form
->
field
[
i
];
col_type
=
get_innobase_type_from_mysql_type
(
field
);
col_type
=
get_innobase_type_from_mysql_type
(
&
unsigned_type
,
field
);
if
(
field
->
null_ptr
)
{
if
(
field
->
null_ptr
)
{
nulls_allowed
=
0
;
nulls_allowed
=
0
;
}
else
{
}
else
{
nulls_allowed
=
DATA_NOT_NULL
;
nulls_allowed
=
DATA_NOT_NULL
;
}
}
if
(
field
->
flags
&
UNSIGNED_FLAG
)
{
unsigned_type
=
DATA_UNSIGNED
;
}
else
{
unsigned_type
=
0
;
}
if
(
field
->
binary
())
{
if
(
field
->
binary
())
{
binary_type
=
DATA_BINARY_TYPE
;
binary_type
=
DATA_BINARY_TYPE
;
}
else
{
}
else
{
...
@@ -3612,6 +3629,7 @@ create_index(
...
@@ -3612,6 +3629,7 @@ create_index(
ulint
ind_type
;
ulint
ind_type
;
ulint
col_type
;
ulint
col_type
;
ulint
prefix_len
;
ulint
prefix_len
;
ulint
is_unsigned
;
ulint
i
;
ulint
i
;
ulint
j
;
ulint
j
;
...
@@ -3661,7 +3679,8 @@ create_index(
...
@@ -3661,7 +3679,8 @@ create_index(
ut_a
(
j
<
form
->
fields
);
ut_a
(
j
<
form
->
fields
);
col_type
=
get_innobase_type_from_mysql_type
(
key_part
->
field
);
col_type
=
get_innobase_type_from_mysql_type
(
&
is_unsigned
,
key_part
->
field
);
if
(
DATA_BLOB
==
col_type
if
(
DATA_BLOB
==
col_type
||
key_part
->
length
<
field
->
pack_length
())
{
||
key_part
->
length
<
field
->
pack_length
())
{
...
...
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