Java源码示例:org.apache.calcite.linq4j.BaseQueryable

示例1
@SuppressWarnings("unchecked")
@Override
public <T> Queryable<T> asQueryable(QueryProvider queryProvider, SchemaPlus schemaPlus, String s) {
    BaseQueryable<RowType> queryable = new BaseQueryable<RowType>(null, getElementType(), null) {
        @Override
        public Enumerator<RowType> enumerator() {
            return Linq4j.enumerator(values);
        }
    };
    return (Queryable<T>) queryable;
}
 
示例2
public static QueryableTable eval(List<String> params) {
  return new AbstractQueryableTable(String.class) {
    public RelDataType getRowType(RelDataTypeFactory typeFactory) {
      RelDataType dataType = typeFactory.createSqlType(
          SqlTypeName.VARCHAR);
      return typeFactory.createStructType(
          Lists.newArrayList(dataType), Lists.newArrayList("s"));
    }

    public <T> Queryable<T> asQueryable(QueryProvider queryProvider,
        SchemaPlus schema, String tableName) {
      BaseQueryable<String> queryable =
          new BaseQueryable<String>(null, String.class, null) {
            public Enumerator<String> enumerator() {
              return new Enumerator<String>() {
                int i = 0;
                int curI;
                String curS;

                public String current() {
                  return curS;
                }

                public boolean moveNext() {
                  if (params == null) {
                    return false;
                  }
                  if (i < params.size()) {
                    curI = i;
                    curS = params.get(i);
                    ++i;
                    return true;
                  } else {
                    return false;
                  }
                }

                public void reset() {
                  i = 0;
                }

                public void close() {
                }
              };
            }
          };
      //noinspection unchecked
      return (Queryable<T>) queryable;
    }
  };
}
 
示例3
/** A function that generates a table that generates a sequence of
 * {@link IntString} values. */
public static QueryableTable generateStrings(final Integer count) {
  return new AbstractQueryableTable(IntString.class) {
    public RelDataType getRowType(RelDataTypeFactory typeFactory) {
      return typeFactory.createJavaType(IntString.class);
    }

    public <T> Queryable<T> asQueryable(QueryProvider queryProvider,
        SchemaPlus schema, String tableName) {
      BaseQueryable<IntString> queryable =
          new BaseQueryable<IntString>(null, IntString.class, null) {
            public Enumerator<IntString> enumerator() {
              return new Enumerator<IntString>() {
                static final String Z = "abcdefghijklm";

                int i = 0;
                int curI;
                String curS;

                public IntString current() {
                  return new IntString(curI, curS);
                }

                public boolean moveNext() {
                  if (i < count) {
                    curI = i;
                    curS = Z.substring(0, i % Z.length());
                    ++i;
                    return true;
                  } else {
                    return false;
                  }
                }

                public void reset() {
                  i = 0;
                }

                public void close() {
                }
              };
            }
          };
      //noinspection unchecked
      return (Queryable<T>) queryable;
    }
  };
}