THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
// Add SqlDescribeCatalog & DescribeCatalogOperation
// Add SqlDescribeDatabase & DescribeDatabaseOperation
// Add SqlDescribeFunction & DescribeFunctionOperation
About DescribeCatalog:
+-------------------------+-----------------------------+
| catalog_description_item| catalog_description_value |
+-------------------------+-----------------------------+
| Catalog Name | xxx |
| Properties| (key1=val1, key2=val2, ...) |
+-------------------------+-----------------------------+
About DescribeDatabase:
+-------------------------+-----------------------------+
|database_description_item| database_description_value|
+-------------------------+-----------------------------+
| Database Name| employees|
| Description| For software companies|
| Properties| (key1=val1, key2=val2, ...) |
+-------------------------+-----------------------------+
About DescribeFunction:
+-------------------------+-----------------------------+
|function_description_item| function_description_value|
+-------------------------+-----------------------------+
| Function Name | ABS |
| Function Language| JAVA |
| Resource Uri | file://xxx |
| Details | details |
+-------------------------+-----------------------------+
The concrete describe infos we can get from the specific catalog object.
// Changed SqlNodes & Operations
// SqlShowCatalogs
public class SqlShowCatalogs extends SqlCall {
public static final SqlSpecialOperator OPERATOR =
new SqlSpecialOperator("SHOW CATALOGS", SqlKind.OTHER);
protected final SqlLikeType likeType;
protected final boolean notLike;
protected final SqlCharStringLiteral likeLiteral;
public SqlShowCatalogs(SqlParserPos pos) {
super(pos);
this.likeType = null;
this.notLike = false;
this.likeLiteral = null;
}
public SqlShowCatalogs(
SqlParserPos pos, String likeType, boolean notLike, SqlCharStringLiteral likeLiteral) {
super(pos);
if (likeType != null) {
this.likeType = SqlLikeType.of(likeType);
this.likeLiteral = requireNonNull(likeLiteral, "Like pattern must not be null");
} else {
this.likeType = null;
this.likeLiteral = null;
}
this.notLike = notLike;
}
public SqlLikeType getLikeType() {
return likeType;
}
public boolean isLike() {
return likeType == SqlLikeType.LIKE;
}
public boolean isILike() {
return likeType == SqlLikeType.ILIKE;
}
public boolean isWithLike() {
return isLike() || isILike();
}
public boolean isNotLike() {
return notLike;
}
public String getLikeSqlPattern() {
return Objects.isNull(likeLiteral) ? null : likeLiteral.getValueAs(String.class);
}
@Override
public SqlOperator getOperator() {
return OPERATOR;
}
@Override
public List<SqlNode> getOperandList() {
return Collections.emptyList();
}
@Override
public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
writer.keyword("SHOW CATALOGS");
if (isWithLike()) {
if (isNotLike()) {
writer.keyword(String.format("NOT %s '%s'", likeType.name(), getLikeSqlPattern()));
} else {
writer.keyword(String.format("%s '%s'", likeType.name(), getLikeSqlPattern()));
}
}
}
}
// ShowCatalogsOperation
public class ShowCatalogsOperation implements ShowOperation {
private final OperationLikeType likeType;
private final boolean notLike;
private final String likePattern;
/** Use when there is no sub-clause. */
public ShowCatalogsOperation() {
this.likeType = null;
this.notLike = false;
this.likePattern = null;
}
/** Use when there is like. */
public ShowCatalogsOperation(String likeType, boolean notLike, String likePattern) {
this.likeType = OperationLikeType.of(checkNotNull(likeType, "Like type must not be null"));
this.likePattern = checkNotNull(likePattern, "Like pattern must not be null");
this.notLike = notLike;
}
public boolean isLike() {
return likeType == OperationLikeType.LIKE;
}
public boolean isIlike() {
return likeType == OperationLikeType.ILIKE;
}
public boolean isWithLike() {
return isLike() || isIlike();
}
public boolean isNotLike() {
return notLike;
}
public String getLikePattern() {
return likePattern;
}
@Override
public String asSummaryString() {
StringBuilder builder = new StringBuilder().append("SHOW CATALOGS");
if (isWithLike()) {
if (notLike) {
builder.append(String.format(" NOT %s %s", likeType.name(), likePattern));
} else {
builder.append(String.format(" %s %s", likeType.name(), likePattern));
}
}
return builder.toString();
}
}
// SqlShowDatabases
public class SqlShowDatabases extends SqlCall {
public static final SqlSpecialOperator OPERATOR =
new SqlSpecialOperator("SHOW DATABASES", SqlKind.OTHER);
protected final String preposition;
protected final SqlIdentifier catalogName;
protected final SqlLikeType likeType;
protected final boolean notLike;
protected final SqlCharStringLiteral likeLiteral;
public SqlShowDatabases(SqlParserPos pos) {
super(pos);
this.preposition = null;
this.catalogName = null;
this.likeType = null;
this.notLike = false;
this.likeLiteral = null;
}
public SqlShowDatabases(
SqlParserPos pos,
String preposition,
SqlIdentifier catalogName,
String likeType,
boolean notLike,
SqlCharStringLiteral likeLiteral) {
super(pos);
this.preposition = preposition;
this.catalogName =
preposition != null
? requireNonNull(catalogName, "Catalog name must not be null.")
: null;
if (likeType != null) {
this.likeType = SqlLikeType.of(likeType);
this.likeLiteral = requireNonNull(likeLiteral, "Like pattern must not be null");
} else {
this.likeType = null;
this.likeLiteral = null;
}
this.notLike = notLike;
}
public String getPreposition() {
return preposition;
}
public SqlIdentifier getCatalogName() {
return catalogName;
}
public String catalogName() {
return catalogName != null ? catalogName.getSimple() : null;
}
public SqlLikeType getLikeType() {
return likeType;
}
public boolean isLike() {
return likeType == SqlLikeType.LIKE;
}
public boolean isILike() {
return likeType == SqlLikeType.ILIKE;
}
public boolean isNotLike() {
return notLike;
}
public boolean isWithLike() {
return isLike() || isILike();
}
public SqlCharStringLiteral getLikeLiteral() {
return likeLiteral;
}
public String getLikeSqlPattern() {
return Objects.isNull(likeLiteral) ? null : likeLiteral.getValueAs(String.class);
}
@Override
public SqlOperator getOperator() {
return OPERATOR;
}
@Override
public List<SqlNode> getOperandList() {
return Objects.isNull(this.catalogName)
? Collections.emptyList()
: Collections.singletonList(catalogName);
}
@Override
public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
if (this.preposition == null) {
writer.keyword("SHOW DATABASES");
} else if (catalogName != null) {
writer.keyword("SHOW DATABASES " + this.preposition);
catalogName.unparse(writer, leftPrec, rightPrec);
}
if (isWithLike()) {
if (isNotLike()) {
writer.keyword(String.format("NOT %s '%s'", likeType.name(), getLikeSqlPattern()));
} else {
writer.keyword(String.format("%s '%s'", likeType.name(), getLikeSqlPattern()));
}
}
}
// ShowDatabasesOperation
public class ShowDatabasesOperation implements ShowOperation {
private final String preposition;
private final String catalogName;
private final OperationLikeType likeType;
private final boolean notLike;
private final String likePattern;
/** Use when there is no sub-clause. */
public ShowDatabasesOperation() {
this.preposition = null;
this.catalogName = null;
this.likeType = null;
this.notLike = false;
this.likePattern = null;
}
/** Use when there is only like. */
public ShowDatabasesOperation(String likeType, boolean notLike, String likePattern) {
this.preposition = null;
this.catalogName = null;
this.likeType = OperationLikeType.of(checkNotNull(likeType, "Like type must not be null"));
this.likePattern = checkNotNull(likePattern, "Like pattern must not be null");
this.notLike = notLike;
}
/** Use when there is preposition and like. */
public ShowDatabasesOperation(
String preposition,
String catalogName,
String likeType,
boolean notLike,
String likePattern) {
this.preposition = checkNotNull(preposition, "Preposition must not be null");
this.catalogName = checkNotNull(catalogName, "Catalog name must not be null");
if (likeType != null) {
this.likeType = OperationLikeType.of(likeType);
this.likePattern = checkNotNull(likePattern, "Like pattern must not be null");
} else {
this.likeType = null;
this.likePattern = null;
}
this.notLike = notLike;
}
public String getPreposition() {
return preposition;
}
public String getCatalogName() {
return catalogName;
}
public boolean isLike() {
return likeType == OperationLikeType.LIKE;
}
public boolean isIlike() {
return likeType == OperationLikeType.ILIKE;
}
public boolean isWithLike() {
return isLike() || isIlike();
}
public boolean isNotLike() {
return notLike;
}
public String getLikePattern() {
return likePattern;
}
@Override
public String asSummaryString() {
StringBuilder builder = new StringBuilder().append("SHOW DATABASES");
if (preposition != null) {
builder.append(String.format(" %s %s", preposition, catalogName));
}
if (isWithLike()) {
if (notLike) {
builder.append(String.format(" NOT %s %s", likeType.name(), likePattern));
} else {
builder.append(String.format(" %s %s", likeType.name(), likePattern));
}
}
return builder.toString();
}
}
// omit here. basically same as ShowCatalogs/ShowDatabases above.
// SqlShowFunctions & ShowFunctionsOperation
// SqlShowViews & ShowViewsOperation
// SqlShowModules & ShowModulesOperation
// SqlShowJars & ShowJarsOperation
// SqlShowJobs & ShowJobsOperation |
...