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
4a27cbfd
Commit
4a27cbfd
authored
May 20, 2006
by
igor@rurik.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge rurik.mysql.com:/home/igor/mysql-5.0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0
parents
0a778b4c
12e53358
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
105 additions
and
6 deletions
+105
-6
mysql-test/r/view.result
mysql-test/r/view.result
+42
-0
mysql-test/t/view.test
mysql-test/t/view.test
+29
-0
sql/field.cc
sql/field.cc
+1
-0
sql/field.h
sql/field.h
+1
-0
sql/sql_select.cc
sql/sql_select.cc
+32
-6
No files found.
mysql-test/r/view.result
View file @
4a27cbfd
...
...
@@ -2694,3 +2694,45 @@ Age
38
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a char(6) DEFAULT 'xxx');
INSERT INTO t1(id) VALUES (1), (2), (3), (4);
INSERT INTO t1 VALUES (5,'yyy'), (6,'yyy');
SELECT * FROM t1;
id a
1 xxx
2 xxx
3 xxx
4 xxx
5 yyy
6 yyy
CREATE VIEW v1(a, m) AS SELECT a, MIN(id) FROM t1 GROUP BY a;
SELECT * FROM v1;
a m
xxx 1
yyy 5
CREATE TABLE t2 SELECT * FROM v1;
INSERT INTO t2(m) VALUES (0);
SELECT * FROM t2;
a m
xxx 1
yyy 5
NULL 0
DROP VIEW v1;
DROP TABLE t1,t2;
CREATE TABLE t1 (id int PRIMARY KEY, e ENUM('a','b') NOT NULL DEFAULT 'b');
INSERT INTO t1(id) VALUES (1), (2), (3);
INSERT INTO t1 VALUES (4,'a');
SELECT * FROM t1;
id e
1 b
2 b
3 b
4 a
CREATE VIEW v1(m, e) AS SELECT MIN(id), e FROM t1 GROUP BY e;
CREATE TABLE t2 SELECT * FROM v1;
SELECT * FROM t2;
m e
4 a
1 b
DROP VIEW v1;
DROP TABLE IF EXISTS t1,t2;
mysql-test/t/view.test
View file @
4a27cbfd
...
...
@@ -2566,4 +2566,33 @@ SELECT * FROM v1;
DROP
VIEW
v1
;
DROP
TABLE
t1
;
#
# Bug #19089: wrong inherited dafault values in temp table views
#
CREATE
TABLE
t1
(
id
int
NOT
NULL
PRIMARY
KEY
,
a
char
(
6
)
DEFAULT
'xxx'
);
INSERT
INTO
t1
(
id
)
VALUES
(
1
),
(
2
),
(
3
),
(
4
);
INSERT
INTO
t1
VALUES
(
5
,
'yyy'
),
(
6
,
'yyy'
);
SELECT
*
FROM
t1
;
CREATE
VIEW
v1
(
a
,
m
)
AS
SELECT
a
,
MIN
(
id
)
FROM
t1
GROUP
BY
a
;
SELECT
*
FROM
v1
;
CREATE
TABLE
t2
SELECT
*
FROM
v1
;
INSERT
INTO
t2
(
m
)
VALUES
(
0
);
SELECT
*
FROM
t2
;
DROP
VIEW
v1
;
DROP
TABLE
t1
,
t2
;
CREATE
TABLE
t1
(
id
int
PRIMARY
KEY
,
e
ENUM
(
'a'
,
'b'
)
NOT
NULL
DEFAULT
'b'
);
INSERT
INTO
t1
(
id
)
VALUES
(
1
),
(
2
),
(
3
);
INSERT
INTO
t1
VALUES
(
4
,
'a'
);
SELECT
*
FROM
t1
;
CREATE
VIEW
v1
(
m
,
e
)
AS
SELECT
MIN
(
id
),
e
FROM
t1
GROUP
BY
e
;
CREATE
TABLE
t2
SELECT
*
FROM
v1
;
SELECT
*
FROM
t2
;
DROP
VIEW
v1
;
DROP
TABLE
IF
EXISTS
t1
,
t2
;
sql/field.cc
View file @
4a27cbfd
...
...
@@ -1233,6 +1233,7 @@ Field::Field(char *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
flags
=
null_ptr
?
0
:
NOT_NULL_FLAG
;
comment
.
str
=
(
char
*
)
""
;
comment
.
length
=
0
;
dflt_field
=
0
;
}
uint
Field
::
offset
()
...
...
sql/field.h
View file @
4a27cbfd
...
...
@@ -53,6 +53,7 @@ public:
char
*
ptr
;
// Position to field in record
uchar
*
null_ptr
;
// Byte where null_bit is
Field
*
dflt_field
;
// Field to copy default value from
/*
Note that you can use table->in_use as replacement for current_thd member
only inside of val_*() and store() members (e.g. you can't use it in cons)
...
...
sql/sql_select.cc
View file @
4a27cbfd
...
...
@@ -8138,6 +8138,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
bool
make_copy_field
,
uint
convert_blob_length
)
{
Field
*
result
;
Item
::
Type
orig_type
=
type
;
Item
*
orig_item
=
0
;
...
...
@@ -8154,7 +8155,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
case
Item
:
:
SUM_FUNC_ITEM
:
{
Item_sum
*
item_sum
=
(
Item_sum
*
)
item
;
Field
*
result
=
item_sum
->
create_tmp_field
(
group
,
table
,
convert_blob_length
);
result
=
item_sum
->
create_tmp_field
(
group
,
table
,
convert_blob_length
);
if
(
!
result
)
thd
->
fatal_error
();
return
result
;
...
...
@@ -8164,7 +8165,6 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
{
Item_field
*
field
=
(
Item_field
*
)
item
;
bool
orig_modify
=
modify_item
;
Field
*
result
;
if
(
orig_type
==
Item
::
REF_ITEM
)
modify_item
=
0
;
/*
...
...
@@ -8198,6 +8198,8 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
convert_blob_length
);
if
(
orig_type
==
Item
::
REF_ITEM
&&
orig_modify
)
((
Item_ref
*
)
orig_item
)
->
set_result_field
(
result
);
if
(
field
->
field
->
eq_def
(
result
))
result
->
dflt_field
=
field
->
field
;
return
result
;
}
/* Fall through */
...
...
@@ -8220,10 +8222,10 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
DBUG_ASSERT
(((
Item_result_field
*
)
item
)
->
result_field
);
*
from_field
=
((
Item_result_field
*
)
item
)
->
result_field
;
}
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
(
make_copy_field
?
0
:
copy_func
),
modify_item
,
convert_blob_length
);
case
Item
:
:
TYPE_HOLDER
:
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
(
make_copy_field
?
0
:
copy_func
)
,
modify_item
,
convert_blob_length
);
case
Item
:
:
TYPE_HOLDER
:
return
((
Item_type_holder
*
)
item
)
->
make_field_by_type
(
table
);
default:
// Dosen't have to be stored
return
0
;
...
...
@@ -8674,6 +8676,30 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
null_count
+=
(
field
->
field_length
&
7
);
}
field
->
reset
();
if
(
field
->
dflt_field
&&
field
->
dflt_field
->
ptr
)
{
/*
field->dflt_field is set only in the cases when 'field' can
inherit the default value that is defined for the field referred
by the Item_field object from which 'field' has been created.
For a field created not from a Item_field item dflt_field == 0.
*/
my_ptrdiff_t
diff
;
Field
*
orig_field
=
field
->
dflt_field
;
/* Get the value from default_values */
diff
=
(
my_ptrdiff_t
)
(
orig_field
->
table
->
s
->
default_values
-
orig_field
->
table
->
record
[
0
]);
orig_field
->
move_field
(
diff
);
// Points now at default_values
bool
is_null
=
orig_field
->
is_real_null
();
char
*
from
=
orig_field
->
ptr
;
orig_field
->
move_field
(
-
diff
);
// Back to record[0]
if
(
is_null
)
field
->
set_null
();
else
memcpy
(
field
->
ptr
,
from
,
field
->
pack_length
());
}
if
(
from_field
[
i
])
{
/* Not a table Item */
copy
->
set
(
field
,
from_field
[
i
],
save_sum_fields
);
...
...
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