class IgniteSqlCreateTable extends SqlCreate {
    /** */
    private final SqlIdentifier name;

    /** */
    private final @Nullable SqlNodeList columnList;

    /** */
    private final @Nullable SqlNode qry;

    /** */
    private final @Nullable SqlNodeList createOptionList;

    /** */
    private static final SqlOperator OPERATOR = new SqlSpecialOperator("CREATE TABLE", SqlKind.CREATE_TABLE) {
            /**
             * Required to override this method to correctly copy SQL nodes on SqlShuttle.
             */
            @Override public SqlCall createCall(
                @Nullable SqlLiteral functionQualifier,
                SqlParserPos pos,
                @Nullable SqlNode... operands
            ) {
                assert operands != null && operands.length == 4 : operands;

                return new IgniteSqlCreateTable(pos, false, (SqlIdentifier)operands[0],
                    (SqlNodeList)operands[1], operands[2], (SqlNodeList)operands[3]);
            }
        };

    /** Creates a SqlCreateTable. */
    public IgniteSqlCreateTable(SqlParserPos pos, boolean ifNotExists, SqlIdentifier name,
        @Nullable SqlNodeList columnList, @Nullable SqlNode qry, @Nullable SqlNodeList createOptionList) {
        super(OPERATOR, pos, false, ifNotExists);
        this.name = Objects.requireNonNull(name, "name");
        this.columnList = columnList;
        this.qry = qry;
        this.createOptionList = createOptionList;
    }

    /** {@inheritDoc} */
    @SuppressWarnings("nullness")
    @Override public List<SqlNode> getOperandList() {
        return ImmutableNullableList.of(name, columnList, qry, createOptionList);
    }

    /** {@inheritDoc} */
    @Override public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {<FILL_FUNCTION_BODY>}

    /**
     * @return Name of the table.
     */
    public SqlIdentifier name() {
        return name;
    }

    /**
     * @return List of the specified columns and constraints.
     */
    public SqlNodeList columnList() {
        return columnList;
    }

    /**
     * @return Query of "CREATE TABLE AS query" statement.
     */
    public SqlNode query() {
        return qry;
    }

    /**
     * @return List of the specified options to create table with.
     */
    public SqlNodeList createOptionList() {
        return createOptionList;
    }

    /**
     * @return Whether the IF NOT EXISTS is specified.
     */
    public boolean ifNotExists() {
        return ifNotExists;
    }
}

        writer.keyword("CREATE");
        writer.keyword("TABLE");
        if (ifNotExists)
            writer.keyword("IF NOT EXISTS");

        name.unparse(writer, leftPrec, rightPrec);

        if (columnList != null) {
            SqlWriter.Frame frame = writer.startList("(", ")");
            for (SqlNode c : columnList) {
                writer.sep(",");
                c.unparse(writer, 0, 0);
            }
            writer.endList(frame);
        }

        if (createOptionList != null) {
            writer.keyword("WITH");

            createOptionList.unparse(writer, 0, 0);
        }

        if (qry != null) {
            writer.keyword("AS");
            writer.newlineAndIndent();
            qry.unparse(writer, 0, 0);
        }
    
<no_super_class>