Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

But these features are not very complete compared with other popular engines such as spark, presto.

For example, many popular engines support show operation with filtering except flink, and support describe other object(flink only support describe table).


show

Support or Not

Support filter or Not

show tables

Yes

Yes

show columns

Yes

Yes

show catalogs

Yes

No

show databases

Yes

No

show functions

Yes

No

show views

Yes

No

show modules

Yes

No

show jars

Yes

No

show jobs

Yes

No

...

Code Block
languagejava
titleOperations
linenumberstrue
// Add DescribeDatabaseOperation
// Add DescribeViewOperation
// Add DescribeFunctionOperation

// Changed Operations

// ShowCatalogsOperation
public class ShowCatalogsOperation implements ShowOperation {

    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;

    public ShowCatalogsOperation(boolean useLike, boolean notLike, String likePattern) {
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
    }

    @Override
    public String asSummaryString() {
        return "SHOW CATALOGS";
    }
}

// ShowDatabasesOperation
public class ShowDatabasesOperation implements ShowOperation {

    private final String catalogName;
    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;
    private final String preposition;

    public ShowDatabasesOperation(
            String catalogName,
            boolean useLike,
            boolean notLike,
            String likePattern,
            String preposition) {
        this.catalogName = catalogName;
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
        this.preposition = preposition;
    }
}

// ShowFunctionsOperation
public class ShowFunctionsOperation @Override
implements    public String asSummaryString() {
        return "SHOW DATABASES";ShowOperation {

    }
}

// ShowFunctionsOperation
public class ShowFunctionsOperation implements ShowOperation {

    private final String catalogName;
    private final String databaseName;
    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;
    private final String preposition;
    private final FunctionScope functionScope;

    /**
     * Represent scope of function.
     *
     * <ul>
     *   <li><b>USER</b> return only user-defined functions
     *   <li><b>ALL</b> return all user-defined and built-in functions
     * </ul>
     */
    public enum FunctionScope {
        USER,
        ALL
    }

    public ShowFunctionsOperation(
            String catalogName,
            String databaseName,
            boolean useLike,
            boolean notLike,
            String likePattern,
            String preposition,
            FunctionScope functionScope) {
        this.catalogName = catalogName;
        this.databaseName = databaseName;
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
        this.preposition = preposition;
        this.functionScope = functionScope;
    }

    @Override
public    public String asSummaryString() {
        if (functionScope == FunctionScope.ALL) {
            return "SHOW FUNCTIONS";
        } else {
            return String.format("SHOW %s FUNCTIONS", functionScope);
        }
    }

    public FunctionScope FunctionScope getFunctionScope() {
        return functionScope;
    }
}

// ShowViewsOperation
public class ShowViewsOperation implements ShowOperation {

    private final String catalogName;
    private final String databaseName;
    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;
    private final String preposition;

    public ShowViewsOperation(
            String catalogName,
            String databaseName,
            boolean useLike,
            boolean notLike,
            String likePattern,
            String preposition) {
        this.catalogName = catalogName;
        this.databaseName = databaseName;
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
        this.preposition = preposition;
    }

    @Override
    public String asSummaryString() {
        return "SHOW VIEWS";
    }
}

// ShowModulesOperation
public class ShowModulesOperation implements ShowOperation {

    private final boolean requireFull;
    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;

    public ShowModulesOperation(
            boolean requireFull, boolean useLike, boolean notLike, String likePattern) {
        this.requireFull = requireFull;
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
    }

    @Override
    public String asSummaryString() {
        return requireFull ? "SHOW FULL MODULES" : "SHOW MODULES"this.likePattern = likePattern;
    }

    public boolean requireFull() {
        return requireFull;
    }
}

// ShowJarsOperation
public class ShowJarsOperation implements ShowOperation {

    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;

    public ShowJarsOperation(boolean useLike, boolean notLike, String likePattern) {
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
    }

    @Override
    public String asSummaryString() { notLike;
        return "SHOW JARS"this.likePattern = likePattern;
    }
}

// ShowJobsOperation
public class ShowJobsOperation implements ShowOperation {

    private final boolean useLike;
    private final boolean notLike;
    private final String likePattern;

    public ShowJobsOperation(boolean useLike, boolean notLike, String likePattern) {
        this.useLike = useLike;
        this.notLike = notLike;
        this.likePattern = likePattern;
    }

    @Override
    public String asSummaryString() {
        return "SHOW JOBS";
    }
}

Future Work

to be added

...