All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.wz2cool.canal.utils.converter.hive.HiveAlterSqlConverter Maven / Gradle / Ivy

The newest version!
package com.github.wz2cool.canal.utils.converter.hive;

import com.github.wz2cool.canal.utils.converter.BaseAlterSqlConverter;
import com.github.wz2cool.canal.utils.converter.IColDataTypeConverter;
import com.github.wz2cool.canal.utils.model.AlterColumnExpression;
import net.sf.jsqlparser.statement.create.table.ColDataType;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

public class HiveAlterSqlConverter extends BaseAlterSqlConverter {
    // https://www.cnblogs.com/linn/p/6233776.html
    private final HiveColDataTypeConverter hiveColDataTypeConverter = new HiveColDataTypeConverter();

    @Override
    protected IColDataTypeConverter getColDataTypeConverter() {
        return this.hiveColDataTypeConverter;
    }

    @Override
    protected Optional convertToAddColumnSql(AlterColumnExpression alterColumnExpression) {
        String tableName = alterColumnExpression.getTableName();
        String columnName = alterColumnExpression.getColumnName();
        ColDataType colDataType = alterColumnExpression.getColDataType();
        String dataTypeString = getDataTypeString(colDataType);
        String sql = String.format("ALTER TABLE %s ADD COLUMNS (%s %s)",
                tableName, columnName, dataTypeString);
        return Optional.of(sql);
    }

    @Override
    protected Optional convertToChangeColumnTypeSql(AlterColumnExpression alterColumnExpression) {
        String tableName = alterColumnExpression.getTableName();
        String columnName = alterColumnExpression.getColumnName();
        ColDataType colDataType = alterColumnExpression.getColDataType();
        String dataTypeString = getDataTypeString(colDataType);
        String sql = String.format("ALTER TABLE %s CHANGE %s %s %s",
                tableName, columnName, columnName, dataTypeString);
        return Optional.of(sql);
    }

    @SuppressWarnings("squid:S4144")
    @Override
    protected Optional convertToRenameColumnSql(AlterColumnExpression alterColumnExpression) {
        String tableName = alterColumnExpression.getTableName();
        String columnName = alterColumnExpression.getColumnName();
        String colOldName = alterColumnExpression.getColOldName();
        ColDataType colDataType = alterColumnExpression.getColDataType();
        String dataTypeString = getDataTypeString(colDataType);
        String sql = String.format("ALTER TABLE %s CHANGE %s %s %s",
                tableName, colOldName, columnName, dataTypeString);
        return Optional.of(sql);
    }

    // hive not support drop keyword. we have use replace, but we don't know table schema.
    @Override
    protected Optional convertToDropColumnSql(AlterColumnExpression alterColumnExpression) {
        return Optional.empty();
    }

    @Override
    protected List convertToOtherColumnActionSqlList(List alterColumnExpressions) {
        return new ArrayList<>();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy