* This file is part of the oGRAC project.
* Copyright (c) 2024 Huawei Technologies Co.,Ltd.
*
* oGRAC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*
* dml.h
*
*
* IDENTIFICATION
* src/ogsql/pl/ast/dml.h
*
* -------------------------------------------------------------------------
*/
#ifndef __DML_H__
#define __DML_H__
#include "cm_word.h"
#ifdef __cplusplus
extern "C" {
#endif
#define PLC_NOT_NEED_NEXT_SPACE(word) \
((word)->type == WORD_TYPE_COMPARE || (word)->type == WORD_TYPE_SPEC_CHAR || \
((word)->type == WORD_TYPE_OPERATOR && (word)->id != OPER_TYPE_ROOT && (word)->id != OPER_TYPE_MUL && \
(word)->id != OPER_TYPE_PRIOR))
#define PLC_IS_DML_WORD(word) \
((word)->id == KEY_WORD_SELECT || (word)->id == KEY_WORD_INSERT || (word)->id == KEY_WORD_UPDATE || \
(word)->id == KEY_WORD_DELETE || (word)->id == KEY_WORD_MERGE || (word)->id == KEY_WORD_REPLACE)
#define PLC_IS_RETURNING_WORD(word) \
((word)->id == KEY_WORD_RETURN || (word)->id == KEY_WORD_RETURNING || (word)->id == KEY_WORD_INTO)
#define PLC_IS_ALL_INTO_WORD(word) ((word)->id == KEY_WORD_INTO)
bool32 plc_dmlhook_none(word_t *word);
bool32 plc_dmlhook_spec_char(word_t *word);
bool32 plc_dmlhook_qrylist(word_t *word);
bool32 plc_dmlhook_current(word_t *word);
bool32 plc_dmlhook_insert_head(word_t *word);
bool32 plc_dmlhook_replace_head(word_t *word);
bool32 plc_dmlhook_update_head(word_t *word);
bool32 plc_dmlhook_merge_head(word_t *word);
bool32 plc_dmlhook_merge_when(word_t *word);
bool32 plc_dmlhook_end(word_t *word);
bool32 plc_dmlhook_merge_insert(word_t *word);
bool32 plc_dmlhook_return_returning(word_t *word);
bool32 plc_dmlhook_all_into(word_t *word);
bool32 plc_dmlhook_return_into(word_t *word);
#ifdef __cplusplus
}
#endif
#endif