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

com.hazelcast.org.apache.calcite.sql.SqlSetOption Maven / Gradle / Ivy

There is a newer version: 5.4.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to you under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.hazelcast.org.apache.calcite.sql;

import com.hazelcast.org.apache.calcite.sql.parser.SqlParserPos;
import com.hazelcast.org.apache.calcite.sql.validate.SqlValidator;
import com.hazelcast.org.apache.calcite.sql.validate.SqlValidatorScope;
import com.hazelcast.org.apache.calcite.util.ImmutableNullableList;

import com.hazelcast.org.checkerframework.checker.nullness.qual.Nullable;

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

import static java.util.Objects.requireNonNull;

/**
 * SQL parse tree node to represent {@code SET} and {@code RESET} statements,
 * optionally preceded by {@code ALTER SYSTEM} or {@code ALTER SESSION}.
 *
 * 

Syntax: * *

* ALTER scope SET `option.name` = value;
* ALTER scope RESET `option`.`name`;
* ALTER scope RESET ALL;
*
* SET `option.name` = value;
* RESET `option`.`name`;
* RESET ALL; *
* *

If {@link #scope} is null, assume a default scope. (The default scope * is defined by the project using Calcite, but is typically SESSION.) * *

If {@link #value} is null, assume RESET; * if {@link #value} is not null, assume SET. * *

Examples: * *

    *
  • ALTER SYSTEM SET `my`.`param1` = 1
  • *
  • SET `my.param2` = 1
  • *
  • SET `my.param3` = ON
  • *
  • ALTER SYSTEM RESET `my`.`param1`
  • *
  • RESET `my.param2`
  • *
  • ALTER SESSION RESET ALL
  • *
*/ public class SqlSetOption extends SqlAlter { public static final SqlSpecialOperator OPERATOR = new SqlSpecialOperator("SET_OPTION", SqlKind.SET_OPTION) { @SuppressWarnings("argument.type.incompatible") @Override public SqlCall createCall(@Nullable SqlLiteral functionQualifier, SqlParserPos pos, @Nullable SqlNode... operands) { final SqlNode scopeNode = operands[0]; return new SqlSetOption(pos, scopeNode == null ? null : scopeNode.toString(), (SqlIdentifier) operands[1], operands[2]); } }; /** Name of the option as an {@link com.hazelcast.org.apache.calcite.sql.SqlIdentifier} * with one or more parts.*/ SqlIdentifier name; /** Value of the option. May be a {@link com.hazelcast.org.apache.calcite.sql.SqlLiteral} or * a {@link com.hazelcast.org.apache.calcite.sql.SqlIdentifier} with one * part. Reserved words (currently just 'ON') are converted to * identifiers by the parser. */ @Nullable SqlNode value; /** * Creates a node. * * @param pos Parser position, must not be null. * @param scope Scope (generally "SYSTEM" or "SESSION"), may be null. * @param name Name of option, as an identifier, must not be null. * @param value Value of option, as an identifier or literal, may be null. * If null, assume RESET command, else assume SET command. */ public SqlSetOption(SqlParserPos pos, @Nullable String scope, SqlIdentifier name, @Nullable SqlNode value) { super(pos, scope); this.scope = scope; this.name = name; this.value = value; assert name != null; } @Override public SqlKind getKind() { return SqlKind.SET_OPTION; } @Override public SqlOperator getOperator() { return OPERATOR; } @SuppressWarnings("nullness") @Override public List getOperandList() { final List<@Nullable SqlNode> operandList = new ArrayList<>(); if (scope == null) { operandList.add(null); } else { operandList.add(new SqlIdentifier(scope, SqlParserPos.ZERO)); } operandList.add(name); operandList.add(value); return ImmutableNullableList.copyOf(operandList); } @Override public void setOperand(int i, @Nullable SqlNode operand) { switch (i) { case 0: if (operand != null) { scope = ((SqlIdentifier) operand).getSimple(); } else { scope = null; } break; case 1: name = (SqlIdentifier) requireNonNull(operand, /**/ "name"); break; case 2: value = operand; break; default: throw new AssertionError(i); } } @Override protected void unparseAlterOperation(SqlWriter writer, int leftPrec, int rightPrec) { if (value != null) { writer.keyword("SET"); } else { writer.keyword("RESET"); } final SqlWriter.Frame frame = writer.startList(SqlWriter.FrameTypeEnum.SIMPLE); name.unparse(writer, leftPrec, rightPrec); if (value != null) { writer.sep("="); value.unparse(writer, leftPrec, rightPrec); } writer.endList(frame); } @Override public void validate(SqlValidator validator, SqlValidatorScope scope) { if (value != null) { validator.validate(value); } } public SqlIdentifier getName() { return name; } public void setName(SqlIdentifier name) { this.name = name; } public @Nullable SqlNode getValue() { return value; } public void setValue(SqlNode value) { this.value = value; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy