/* -------------------------------------------------------------------------
 *  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.c
 *
 *
 * IDENTIFICATION
 * src/ogsql/pl/ast/dml.c
 *
 * -------------------------------------------------------------------------
 */
#include "dml.h"

bool32 plc_dmlhook_none(word_t *word)
{
    return OG_FALSE;
}

bool32 plc_dmlhook_merge_head(word_t *word)
{
    return (word->id == KEY_WORD_USING);
}

bool32 plc_dmlhook_spec_char(word_t *word)
{
    return word->text.len == 1 && word->text.str[0] == ',';
}

bool32 plc_dmlhook_qrylist(word_t *word)
{
    return (word->id == KEY_WORD_INTO || word->id == KEY_WORD_BULK || word->id == KEY_WORD_FROM);
}

bool32 plc_dmlhook_current(word_t *word)
{
    return (word->id == KEY_WORD_CURRENT || PLC_IS_RETURNING_WORD(word));
}

bool32 plc_dmlhook_insert_head(word_t *word)
{
    return (word->id == KEY_WORD_VALUES || word->id == KEY_WORD_SELECT);
}

bool32 plc_dmlhook_replace_head(word_t *word)
{
    return (word->id == KEY_WORD_VALUES || word->id == KEY_WORD_SELECT || word->id == KEY_WORD_SET);
}

bool32 plc_dmlhook_update_head(word_t *word)
{
    return (word->id == KEY_WORD_SET);
}

bool32 plc_dmlhook_merge_when(word_t *word)
{
    return (word->id == KEY_WORD_WHEN);
}

bool32 plc_dmlhook_end(word_t *word)
{
    return (word->id == KEY_WORD_END);
}

bool32 plc_dmlhook_merge_insert(word_t *word)
{
    return (word->id == KEY_WORD_VALUES);
}

bool32 plc_dmlhook_return_returning(word_t *word)
{
    return PLC_IS_RETURNING_WORD(word);
}

bool32 plc_dmlhook_all_into(word_t *word)
{
    return PLC_IS_ALL_INTO_WORD(word);
}

bool32 plc_dmlhook_return_into(word_t *word)
{
    return (word->id == KEY_WORD_INTO || word->id == KEY_WORD_BULK);
}