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
6f42cae0
Commit
6f42cae0
authored
Aug 23, 2020
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/10.4' into 10.5
parents
6708e67a
2e5d86f4
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
88 additions
and
0 deletions
+88
-0
sql/field.cc
sql/field.cc
+56
-0
sql/field.h
sql/field.h
+5
-0
sql/item.cc
sql/item.cc
+18
-0
sql/item.h
sql/item.h
+2
-0
sql/sql_type.h
sql/sql_type.h
+7
-0
No files found.
sql/field.cc
View file @
6f42cae0
...
...
@@ -2419,6 +2419,33 @@ bool Field::get_date(MYSQL_TIME *to, date_mode_t mode)
return
!
t
->
is_valid_temporal
();
}
longlong
Field
::
val_datetime_packed
(
THD
*
thd
)
{
MYSQL_TIME
ltime
,
tmp
;
if
(
get_date
(
&
ltime
,
Datetime
::
Options_cmp
(
thd
)))
return
0
;
if
(
ltime
.
time_type
!=
MYSQL_TIMESTAMP_TIME
)
return
pack_time
(
&
ltime
);
if
(
time_to_datetime_with_warn
(
thd
,
&
ltime
,
&
tmp
,
TIME_CONV_NONE
))
return
0
;
return
pack_time
(
&
tmp
);
}
longlong
Field
::
val_time_packed
(
THD
*
thd
)
{
MYSQL_TIME
ltime
;
Time
::
Options_cmp
opt
(
thd
);
if
(
get_date
(
&
ltime
,
opt
))
return
0
;
if
(
ltime
.
time_type
==
MYSQL_TIMESTAMP_TIME
)
return
pack_time
(
&
ltime
);
// Conversion from DATETIME or DATE to TIME is needed
return
Time
(
thd
,
&
ltime
,
opt
).
to_packed
();
}
/**
This is called when storing a date in a string.
...
...
@@ -6339,6 +6366,17 @@ Binlog_type_info Field_timef::binlog_type_info() const
return
Binlog_type_info
(
Field_timef
::
binlog_type
(),
decimals
(),
1
);
}
longlong
Field_timef
::
val_time_packed
(
THD
*
thd
)
{
DBUG_ASSERT
(
marked_for_read
());
longlong
tmp
=
my_time_packed_from_binary
(
ptr
,
dec
);
MYSQL_TIME
ltime
;
TIME_from_longlong_time_packed
(
&
ltime
,
tmp
);
return
pack_time
(
&
ltime
);
}
int
Field_timef
::
store_native
(
const
Native
&
value
)
{
DBUG_ASSERT
(
value
.
length
()
==
my_time_binary_length
(
dec
));
...
...
@@ -6743,6 +6781,14 @@ bool Field_newdate::get_TIME(MYSQL_TIME *ltime, const uchar *pos,
}
longlong
Field_newdate
::
val_datetime_packed
(
THD
*
thd
)
{
MYSQL_TIME
ltime
;
Field_newdate
::
get_date
(
&
ltime
,
date_mode_t
(
0
));
return
pack_time
(
&
ltime
);
}
int
Field_newdate
::
cmp
(
const
uchar
*
a_ptr
,
const
uchar
*
b_ptr
)
const
{
uint32
a
,
b
;
...
...
@@ -7064,6 +7110,16 @@ Binlog_type_info Field_datetimef::binlog_type_info() const
return
Binlog_type_info
(
Field_datetimef
::
binlog_type
(),
decimals
(),
1
);
}
longlong
Field_datetimef
::
val_datetime_packed
(
THD
*
thd
)
{
DBUG_ASSERT
(
marked_for_read
());
longlong
tmp
=
my_datetime_packed_from_binary
(
ptr
,
dec
);
MYSQL_TIME
ltime
;
TIME_from_longlong_datetime_packed
(
&
ltime
,
tmp
);
return
pack_time
(
&
ltime
);
}
/****************************************************************************
** string type
** A string may be varchar or binary
...
...
sql/field.h
View file @
6f42cae0
...
...
@@ -1606,6 +1606,8 @@ class Field: public Value_source
void
copy_from_tmp
(
int
offset
);
uint
fill_cache_field
(
struct
st_cache_field
*
copy
);
virtual
bool
get_date
(
MYSQL_TIME
*
ltime
,
date_mode_t
fuzzydate
);
virtual
longlong
val_datetime_packed
(
THD
*
thd
);
virtual
longlong
val_time_packed
(
THD
*
thd
);
virtual
const
TYPELIB
*
get_typelib
()
const
{
return
NULL
;
}
virtual
CHARSET_INFO
*
charset
()
const
=
0
;
virtual
const
DTCollation
&
dtcollation
()
const
=
0
;
...
...
@@ -3513,6 +3515,7 @@ class Field_newdate final :public Field_date_common
void
sql_type
(
String
&
str
)
const
override
;
bool
get_date
(
MYSQL_TIME
*
ltime
,
date_mode_t
fuzzydate
)
override
{
return
Field_newdate
::
get_TIME
(
ltime
,
ptr
,
fuzzydate
);
}
longlong
val_datetime_packed
(
THD
*
thd
)
override
;
uint
size_of
()
const
override
{
return
sizeof
*
this
;
}
Item
*
get_equal_const_item
(
THD
*
thd
,
const
Context
&
ctx
,
Item
*
const_item
)
override
;
...
...
@@ -3713,6 +3716,7 @@ class Field_timef final :public Field_time_with_dec {
}
int
reset
()
override
;
bool
get_date
(
MYSQL_TIME
*
ltime
,
date_mode_t
fuzzydate
)
override
;
longlong
val_time_packed
(
THD
*
thd
)
override
;
int
store_native
(
const
Native
&
value
)
override
;
bool
val_native
(
Native
*
to
)
override
;
uint
size_of
()
const
override
{
return
sizeof
*
this
;
}
...
...
@@ -3916,6 +3920,7 @@ class Field_datetimef final :public Field_datetime_with_dec {
int
reset
()
override
;
bool
get_date
(
MYSQL_TIME
*
ltime
,
date_mode_t
fuzzydate
)
override
{
return
Field_datetimef
::
get_TIME
(
ltime
,
ptr
,
fuzzydate
);
}
longlong
val_datetime_packed
(
THD
*
thd
)
override
;
uint
size_of
()
const
override
{
return
sizeof
*
this
;
}
Binlog_type_info
binlog_type_info
()
const
override
;
};
...
...
sql/item.cc
View file @
6f42cae0
...
...
@@ -3320,6 +3320,24 @@ bool Item_field::val_native_result(THD *thd, Native *to)
}
longlong
Item_field
::
val_datetime_packed
(
THD
*
thd
)
{
DBUG_ASSERT
(
fixed
==
1
);
if
((
null_value
=
field
->
is_null
()))
return
0
;
return
field
->
val_datetime_packed
(
thd
);
}
longlong
Item_field
::
val_time_packed
(
THD
*
thd
)
{
DBUG_ASSERT
(
fixed
==
1
);
if
((
null_value
=
field
->
is_null
()))
return
0
;
return
field
->
val_time_packed
(
thd
);
}
void
Item_field
::
save_result
(
Field
*
to
)
{
save_field_in_field
(
result_field
,
&
null_value
,
to
,
TRUE
);
...
...
sql/item.h
View file @
6f42cae0
...
...
@@ -3474,6 +3474,8 @@ class Item_field :public Item_ident,
longlong
val_int_endpoint
(
bool
left_endp
,
bool
*
incl_endp
);
bool
get_date
(
THD
*
thd
,
MYSQL_TIME
*
ltime
,
date_mode_t
fuzzydate
);
bool
get_date_result
(
THD
*
thd
,
MYSQL_TIME
*
ltime
,
date_mode_t
fuzzydate
);
longlong
val_datetime_packed
(
THD
*
thd
);
longlong
val_time_packed
(
THD
*
thd
);
bool
is_null
()
{
return
field
->
is_null
();
}
void
update_null_value
();
void
update_table_bitmaps
()
...
...
sql/sql_type.h
View file @
6f42cae0
...
...
@@ -1687,6 +1687,13 @@ class Time: public Temporal
Time
(
int
*
warn
,
bool
neg
,
ulonglong
hour
,
uint
minute
,
const
Sec6
&
second
);
Time
()
{
time_type
=
MYSQL_TIMESTAMP_NONE
;
}
Time
(
const
Native
&
native
);
Time
(
THD
*
thd
,
const
MYSQL_TIME
*
ltime
,
const
Options
opt
)
{
*
(
static_cast
<
MYSQL_TIME
*>
(
this
))
=
*
ltime
;
DBUG_ASSERT
(
is_valid_temporal
());
int
warn
=
0
;
valid_MYSQL_TIME_to_valid_value
(
thd
,
&
warn
,
opt
);
}
Time
(
Item
*
item
)
:
Time
(
current_thd
,
item
)
{
}
...
...
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