com.alipay.oceanbase.rpc.protocol.payload.impl.parser.ObGeneratedColumnExpressParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of obkv-table-client Show documentation
Show all versions of obkv-table-client Show documentation
OceanBase JavaClient for TableApi
The newest version!
/*-
* #%L
* OBKV Table Client Framework
* %%
* Copyright (C) 2021 OceanBase
* %%
* OBKV Table Client Framework 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.
* #L%
*/
package com.alipay.oceanbase.rpc.protocol.payload.impl.parser;
import com.alipay.oceanbase.rpc.exception.GenerateColumnParseException;
import com.alipay.oceanbase.rpc.protocol.payload.impl.column.ObGeneratedColumnReferFunc;
import com.alipay.oceanbase.rpc.protocol.payload.impl.column.ObGeneratedColumnSimpleFunc;
import com.alipay.oceanbase.rpc.protocol.payload.impl.column.ObGeneratedColumnSubStrFunc;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import static com.alipay.oceanbase.rpc.protocol.payload.impl.parser.ObGeneratedColumnFuncName.funcToToken;
import static com.alipay.oceanbase.rpc.protocol.payload.impl.parser.ObGeneratedColumnSimpleToken.COMMA;
import static com.alipay.oceanbase.rpc.protocol.payload.impl.parser.ObGeneratedColumnSimpleToken.RPAREN;
public class ObGeneratedColumnExpressParser {
private final ObGeneratedColumnLexer lexer;
/*
* Ob generated column express parser.
*/
public ObGeneratedColumnExpressParser(String text) {
this.lexer = new ObGeneratedColumnLexer(text);
}
/*
* Parse.
*/
public ObGeneratedColumnSimpleFunc parse() throws GenerateColumnParseException {
switch (lexer.token()) {
case IDENTIFIER:
String stringVal = lexer.stringVal();
lexer.nextToken();
switch (lexer.token()) {
case EOF:
return new ObGeneratedColumnReferFunc(stringVal);
case LPAREN:
ObGeneratedColumnFuncName funcName = funcToToken(stringVal.toLowerCase());
switch (funcName) {
case SUB_STR:
ObGeneratedColumnSubStrFunc subStr = new ObGeneratedColumnSubStrFunc();
lexer.nextToken();
listParameters(subStr);
return subStr;
default:
throw new GenerateColumnParseException("");
}
default:
throw new GenerateColumnParseException("");
}
default:
throw new GenerateColumnParseException("ERROR. token : " + lexer.token()
+ ", pos : " + lexer.pos());
}
}
protected void listParameters(ObGeneratedColumnSimpleFunc func) {
List