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
fb75fcde
Commit
fb75fcde
authored
Apr 12, 2006
by
igor@rurik.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge rurik.mysql.com:/home/igor/dev/mysql-5.0-0
into rurik.mysql.com:/home/igor/dev/mysql-5.1-0
parents
6a3bb50c
abc16b5b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
107 additions
and
62 deletions
+107
-62
mysql-test/r/func_time.result
mysql-test/r/func_time.result
+25
-0
mysql-test/r/innodb.result
mysql-test/r/innodb.result
+12
-52
mysql-test/t/func_time.test
mysql-test/t/func_time.test
+22
-0
mysql-test/t/innodb.test
mysql-test/t/innodb.test
+10
-0
sql/item_cmpfunc.cc
sql/item_cmpfunc.cc
+2
-10
sql/item_timefunc.cc
sql/item_timefunc.cc
+35
-0
sql/item_timefunc.h
sql/item_timefunc.h
+1
-0
No files found.
mysql-test/r/func_time.result
View file @
fb75fcde
...
...
@@ -847,3 +847,28 @@ timestampdiff(year,'2004-02-28','2005-02-28')
select timestampdiff(year,'2004-02-29','2005-02-28');
timestampdiff(year,'2004-02-29','2005-02-28')
0
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date);
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date);
INSERT INTO t1 VALUES
(1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01');
INSERT INTO t2 VALUES
(1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15');
SELECT * FROM t1, t2
WHERE t1.day BETWEEN
'2005.09.01' - INTERVAL 6 MONTH AND t2.day;
id day id day
1 2005-06-01 1 2005-08-01
3 2005-07-01 1 2005-08-01
1 2005-06-01 2 2005-06-15
1 2005-06-01 3 2005-07-15
3 2005-07-01 3 2005-07-15
SELECT * FROM t1, t2
WHERE CAST(t1.day AS DATE) BETWEEN
'2005.09.01' - INTERVAL 6 MONTH AND t2.day;
id day id day
1 2005-06-01 1 2005-08-01
3 2005-07-01 1 2005-08-01
1 2005-06-01 2 2005-06-15
1 2005-06-01 3 2005-07-15
3 2005-07-01 3 2005-07-15
DROP TABLE t1,t2;
mysql-test/r/innodb.result
View file @
fb75fcde
...
...
@@ -2924,13 +2924,13 @@ create table t3 (s1 varchar(2) binary,primary key (s1)) engine=innodb;
create table t4 (s1 char(2) binary,primary key (s1)) engine=innodb;
insert into t1 values (0x41),(0x4120),(0x4100);
insert into t2 values (0x41),(0x4120),(0x4100);
ERROR 23000: Duplicate entry 'A' for key
'PRIMARY'
ERROR 23000: Duplicate entry 'A' for key
1
insert into t2 values (0x41),(0x4120);
insert into t3 values (0x41),(0x4120),(0x4100);
ERROR 23000: Duplicate entry 'A ' for key
'PRIMARY'
ERROR 23000: Duplicate entry 'A ' for key
1
insert into t3 values (0x41),(0x4100);
insert into t4 values (0x41),(0x4120),(0x4100);
ERROR 23000: Duplicate entry 'A' for key
'PRIMARY'
ERROR 23000: Duplicate entry 'A' for key
1
insert into t4 values (0x41),(0x4100);
select hex(s1) from t1;
hex(s1)
...
...
@@ -3132,7 +3132,7 @@ ALTER TABLE t2 DROP FOREIGN KEY t2_ibfk_0;
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` int(11)
DEFAULT
NULL,
`a` int(11)
default
NULL,
KEY `t2_ibfk_0` (`a`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1
DROP TABLE t2,t1;
...
...
@@ -3194,52 +3194,12 @@ drop trigger t2t;
drop trigger t3t;
drop trigger t4t;
drop table t1, t2, t3, t4, t5;
CREATE TABLE t1 (
field1 varchar(8) NOT NULL DEFAULT '',
field2 varchar(8) NOT NULL DEFAULT '',
PRIMARY KEY (field1, field2)
)
ENGINE=InnoDB;
CREATE TABLE t2 (
field1 varchar(8) NOT NULL DEFAULT '' PRIMARY KEY,
FOREIGN KEY (field1) REFERENCES t1 (field1)
ON DELETE CASCADE ON UPDATE CASCADE
)
ENGINE=InnoDB;
INSERT INTO t1 VALUES ('old', 'somevalu');
INSERT INTO t1 VALUES ('other', 'anyvalue');
INSERT INTO t2 VALUES ('old');
INSERT INTO t2 VALUES ('other');
UPDATE t1 SET field1 = 'other' WHERE field2 = 'somevalu';
ERROR 23000: Upholding foreign key constraints for table 't1', entry 'other-somevalu', key 1 would lead to a duplicate entry
DROP TABLE t2;
DROP TABLE t1;
create table t1 (
c1 bigint not null,
c2 bigint not null,
primary key (c1),
unique key (c2)
)
engine=innodb;
create table t2 (
c1 bigint not null,
primary key (c1)
)
engine=innodb;
alter table t1 add constraint c2_fk foreign key (c2)
references t2(c1) on delete cascade;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bigint(20) NOT NULL,
`c2` bigint(20) NOT NULL,
PRIMARY KEY (`c1`),
UNIQUE KEY `c2` (`c2`),
CONSTRAINT `c2_fk` FOREIGN KEY (`c2`) REFERENCES `t2` (`c1`) ON DELETE CASCADE
)
ENGINE=InnoDB DEFAULT CHARSET=latin1
alter table t1 drop foreign key c2_fk;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`c1` bigint(20) NOT NULL,
`c2` bigint(20) NOT NULL,
PRIMARY KEY (`c1`),
UNIQUE KEY `c2` (`c2`)
)
ENGINE=InnoDB DEFAULT CHARSET=latin1
create table t1(a date) engine=innodb;
create table t2(a date, key(a)) engine=innodb;
insert into t1 values('2005-10-01');
insert into t2 values('2005-10-01');
select * from t1, t2
where t2.a between t1.a - interval 2 day and t1.a + interval 2 day;
a a
2005-10-01 2005-10-01
drop table t1, t2;
mysql-test/t/func_time.test
View file @
fb75fcde
...
...
@@ -446,4 +446,26 @@ select timestampdiff(year,'1999-09-11','2001-9-11');
select
timestampdiff
(
year
,
'2004-02-28'
,
'2005-02-28'
);
select
timestampdiff
(
year
,
'2004-02-29'
,
'2005-02-28'
);
#
# Bug #18618: BETWEEN for dates with the second argument being a constant
# expression and the first and the third arguments being fields
#
CREATE
TABLE
t1
(
id
int
NOT
NULL
PRIMARY
KEY
,
day
date
);
CREATE
TABLE
t2
(
id
int
NOT
NULL
PRIMARY
KEY
,
day
date
);
INSERT
INTO
t1
VALUES
(
1
,
'2005-06-01'
),
(
2
,
'2005-02-01'
),
(
3
,
'2005-07-01'
);
INSERT
INTO
t2
VALUES
(
1
,
'2005-08-01'
),
(
2
,
'2005-06-15'
),
(
3
,
'2005-07-15'
);
SELECT
*
FROM
t1
,
t2
WHERE
t1
.
day
BETWEEN
'2005.09.01'
-
INTERVAL
6
MONTH
AND
t2
.
day
;
SELECT
*
FROM
t1
,
t2
WHERE
CAST
(
t1
.
day
AS
DATE
)
BETWEEN
'2005.09.01'
-
INTERVAL
6
MONTH
AND
t2
.
day
;
DROP
TABLE
t1
,
t2
;
# End of 5.0 tests
mysql-test/t/innodb.test
View file @
fb75fcde
...
...
@@ -2138,3 +2138,13 @@ show create table t1;
#
drop
table
t1
,
t2
;
# Bug #14360: problem with intervals
#
create
table
t1
(
a
date
)
engine
=
innodb
;
create
table
t2
(
a
date
,
key
(
a
))
engine
=
innodb
;
insert
into
t1
values
(
'2005-10-01'
);
insert
into
t2
values
(
'2005-10-01'
);
select
*
from
t1
,
t2
where
t2
.
a
between
t1
.
a
-
interval
2
day
and
t1
.
a
+
interval
2
day
;
drop
table
t1
,
t2
;
sql/item_cmpfunc.cc
View file @
fb75fcde
...
...
@@ -52,7 +52,6 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
{
uint
i
;
Field
*
field
=
NULL
;
bool
all_constant
=
TRUE
;
/* If the first argument is a FIELD_ITEM, pull out the field. */
if
(
items
[
0
]
->
real_item
()
->
type
()
==
Item
::
FIELD_ITEM
)
...
...
@@ -65,16 +64,9 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
for
(
i
=
1
;
i
<
nitems
;
i
++
)
{
type
[
0
]
=
item_cmp_type
(
type
[
0
],
items
[
i
]
->
result_type
());
if
(
field
&&
!
convert_constant_item
(
thd
,
field
,
&
items
[
i
]))
all_constant
=
FALSE
;
if
(
field
&&
convert_constant_item
(
thd
,
field
,
&
items
[
i
]))
type
[
0
]
=
INT_RESULT
;
}
/*
If we had a field that can be compared as a longlong, and all constant
items, then the aggregate result will be an INT_RESULT.
*/
if
(
field
&&
all_constant
)
type
[
0
]
=
INT_RESULT
;
}
...
...
sql/item_timefunc.cc
View file @
fb75fcde
...
...
@@ -2002,6 +2002,41 @@ longlong Item_date_add_interval::val_int()
((
date
*
100L
+
ltime
.
hour
)
*
100L
+
ltime
.
minute
)
*
100L
+
ltime
.
second
;
}
bool
Item_date_add_interval
::
eq
(
const
Item
*
item
,
bool
binary_cmp
)
const
{
INTERVAL
interval
,
other_interval
;
String
val
=
value
;
// Because of const
if
(
this
==
item
)
return
TRUE
;
if
((
item
->
type
()
!=
FUNC_ITEM
)
||
(
arg_count
!=
((
Item_func
*
)
item
)
->
arg_count
)
||
(
func_name
()
!=
((
Item_func
*
)
item
)
->
func_name
()))
return
FALSE
;
Item_date_add_interval
*
other
=
(
Item_date_add_interval
*
)
item
;
if
((
int_type
!=
other
->
int_type
)
||
(
!
args
[
0
]
->
eq
(
other
->
args
[
0
],
binary_cmp
))
||
(
get_interval_value
(
args
[
1
],
int_type
,
&
val
,
&
interval
)))
return
FALSE
;
val
=
other
->
value
;
if
((
get_interval_value
(
other
->
args
[
1
],
other
->
int_type
,
&
val
,
&
other_interval
))
||
((
date_sub_interval
^
interval
.
neg
)
^
(
other
->
date_sub_interval
^
other_interval
.
neg
)))
return
FALSE
;
// Assume comparing same types here due to earlier check
return
memcmp
(
&
interval
,
&
other_interval
,
sizeof
(
INTERVAL
))
==
0
;
}
static
const
char
*
interval_names
[]
=
{
"year"
,
"quarter"
,
"month"
,
"day"
,
"hour"
,
...
...
sql/item_timefunc.h
View file @
fb75fcde
...
...
@@ -647,6 +647,7 @@ class Item_date_add_interval :public Item_date_func
double
val_real
()
{
DBUG_ASSERT
(
fixed
==
1
);
return
(
double
)
val_int
();
}
longlong
val_int
();
bool
get_date
(
TIME
*
res
,
uint
fuzzy_date
);
bool
eq
(
const
Item
*
item
,
bool
binary_cmp
)
const
;
void
print
(
String
*
str
);
};
...
...
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