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
ac6d9b2e
Commit
ac6d9b2e
authored
Apr 22, 2005
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Bug#7806 - insert on duplicate key and auto-update of timestamp
Merged fix for bugfix to 5.0. sql/table.h: Auto merged
parents
c795511c
3431b217
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
16 additions
and
9 deletions
+16
-9
sql/sql_insert.cc
sql/sql_insert.cc
+6
-3
sql/table.h
sql/table.h
+10
-6
No files found.
sql/sql_insert.cc
View file @
ac6d9b2e
...
@@ -103,7 +103,8 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
...
@@ -103,7 +103,8 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
return
-
1
;
return
-
1
;
}
}
#endif
#endif
*
(
int
*
)
&
table
->
timestamp_field_type
&=
~
(
int
)
TIMESTAMP_AUTO_SET_ON_INSERT
;
clear_timestamp_auto_bits
(
table
->
timestamp_field_type
,
TIMESTAMP_AUTO_SET_ON_INSERT
);
}
}
else
else
{
// Part field list
{
// Part field list
...
@@ -150,7 +151,8 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
...
@@ -150,7 +151,8 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
}
}
if
(
table
->
timestamp_field
&&
// Don't set timestamp if used
if
(
table
->
timestamp_field
&&
// Don't set timestamp if used
table
->
timestamp_field
->
query_id
==
thd
->
query_id
)
table
->
timestamp_field
->
query_id
==
thd
->
query_id
)
*
(
int
*
)
&
table
->
timestamp_field_type
&=
~
(
int
)
TIMESTAMP_AUTO_SET_ON_INSERT
;
clear_timestamp_auto_bits
(
table
->
timestamp_field_type
,
TIMESTAMP_AUTO_SET_ON_INSERT
);
}
}
// For the values we need select_priv
// For the values we need select_priv
#ifndef NO_EMBEDDED_ACCESS_CHECKS
#ifndef NO_EMBEDDED_ACCESS_CHECKS
...
@@ -216,7 +218,8 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
...
@@ -216,7 +218,8 @@ static int check_update_fields(THD *thd, TABLE_LIST *insert_table_list,
{
{
/* Don't set timestamp column if this is modified. */
/* Don't set timestamp column if this is modified. */
if
(
table
->
timestamp_field
->
query_id
==
thd
->
query_id
)
if
(
table
->
timestamp_field
->
query_id
==
thd
->
query_id
)
*
(
int
*
)
&
table
->
timestamp_field_type
&=
~
(
int
)
TIMESTAMP_AUTO_SET_ON_UPDATE
;
clear_timestamp_auto_bits
(
table
->
timestamp_field_type
,
TIMESTAMP_AUTO_SET_ON_UPDATE
);
else
else
table
->
timestamp_field
->
query_id
=
timestamp_query_id
;
table
->
timestamp_field
->
query_id
=
timestamp_query_id
;
}
}
...
...
sql/table.h
View file @
ac6d9b2e
...
@@ -71,18 +71,22 @@ typedef struct st_filesort_info
...
@@ -71,18 +71,22 @@ typedef struct st_filesort_info
/*
/*
Values in this enum are used to indicate during which operations value
Values in this enum are used to indicate how a tables TIMESTAMP field
of TIMESTAMP field should be set to current timestamp.
should be treated. It can be set to the current timestamp on insert or
WARNING: The values are used for bit operations. If you change the enum,
update or both.
you must keep the bitwise relation of the values. For example:
WARNING: The values are used for bit operations. If you change the
(int) TIMESTAMP_AUTO_SET_ON_BOTH ==
enum, you must keep the bitwise relation of the values. For example:
(int) TIMESTAMP_AUTO_SET_ON_BOTH must be equal to
(int) TIMESTAMP_AUTO_SET_ON_INSERT | (int) TIMESTAMP_AUTO_SET_ON_UPDATE.
(int) TIMESTAMP_AUTO_SET_ON_INSERT | (int) TIMESTAMP_AUTO_SET_ON_UPDATE.
We use an enum here so that the debugger can display the value names.
*/
*/
enum
timestamp_auto_set_type
enum
timestamp_auto_set_type
{
{
TIMESTAMP_NO_AUTO_SET
=
0
,
TIMESTAMP_AUTO_SET_ON_INSERT
=
1
,
TIMESTAMP_NO_AUTO_SET
=
0
,
TIMESTAMP_AUTO_SET_ON_INSERT
=
1
,
TIMESTAMP_AUTO_SET_ON_UPDATE
=
2
,
TIMESTAMP_AUTO_SET_ON_BOTH
=
3
TIMESTAMP_AUTO_SET_ON_UPDATE
=
2
,
TIMESTAMP_AUTO_SET_ON_BOTH
=
3
};
};
#define clear_timestamp_auto_bits(_target_, _bits_) \
(_target_)= (enum timestamp_auto_set_type)((int)(_target_) & ~(int)(_bits_))
class
Field_timestamp
;
class
Field_timestamp
;
class
Field_blob
;
class
Field_blob
;
...
...
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