1#ifndef SQL_TRUNCATE_INCLUDED
2#define SQL_TRUNCATE_INCLUDED
3/* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; version 2 of the License.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
17
18class THD;
19struct TABLE_LIST;
20
21/**
22 Sql_cmd_truncate_table represents the TRUNCATE statement.
23*/
24class Sql_cmd_truncate_table : public Sql_cmd
25{
26private:
27 /* Set if a lock must be downgraded after truncate is done. */
28 MDL_ticket *m_ticket_downgrade;
29
30public:
31 /**
32 Constructor, used to represent a TRUNCATE statement.
33 */
34 Sql_cmd_truncate_table()
35 {}
36
37 virtual ~Sql_cmd_truncate_table()
38 {}
39
40 /**
41 Execute a TRUNCATE statement at runtime.
42 @param thd the current thread.
43 @return false on success.
44 */
45 bool execute(THD *thd);
46
47 virtual enum_sql_command sql_command_code() const
48 {
49 return SQLCOM_TRUNCATE;
50 }
51
52protected:
53 enum truncate_result{
54 TRUNCATE_OK=0,
55 TRUNCATE_FAILED_BUT_BINLOG,
56 TRUNCATE_FAILED_SKIP_BINLOG
57 };
58
59 /** Handle locking a base table for truncate. */
60 bool lock_table(THD *, TABLE_LIST *, bool *);
61
62 /** Truncate table via the handler method. */
63 enum truncate_result handler_truncate(THD *, TABLE_LIST *, bool);
64
65 /**
66 Optimized delete of all rows by doing a full regenerate of the table.
67 Depending on the storage engine, it can be accomplished through a
68 drop and recreate or via the handler truncate method.
69 */
70 bool truncate_table(THD *, TABLE_LIST *);
71};
72
73#endif
74