@Override public Meta createMeta(AvaticaConnection connection) { return new CalciteMetaImpl((CalciteConnectionImpl) connection); }
static Predicate1<String> matcher(final Pat pattern) { if (pattern.s == null || pattern.s.equals("%")) { return Functions.truePredicate1(); } final Pattern regex = likeToRegex(pattern); return v1 -> regex.matcher(v1).matches(); }
@Override public Iterable<Object> createIterable(StatementHandle handle, QueryState state, Signature signature, List<TypedValue> parameterValues, Frame firstFrame) { // Drop QueryState return _createIterable(handle, signature, parameterValues, firstFrame); }
public MetaResultSet getCatalogs(ConnectionHandle ch) { return createResultSet(catalogs(), MetaCatalog.class, "TABLE_CAT"); }
public MetaResultSet getTableTypes(ConnectionHandle ch) { return createResultSet(tableTypes(), MetaTableType.class, "TABLE_TYPE"); }
public MetaResultSet getTypeInfo(ConnectionHandle ch) { return createResultSet(allTypeInfo(), MetaTypeInfo.class, "TYPE_NAME", "DATA_TYPE", "PRECISION", "LITERAL_PREFIX", "LITERAL_SUFFIX", "CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_INCREMENT", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX"); }
public MetaResultSet getTables(ConnectionHandle ch, String catalog, final Pat schemaPattern, final Pat tableNamePattern, final List<String> typeList) { final Predicate1<MetaTable> typeFilter; if (typeList == null) { typeFilter = Functions.truePredicate1(); } else { typeFilter = v1 -> typeList.contains(v1.tableType); } final Predicate1<MetaSchema> schemaMatcher = namedMatcher(schemaPattern); return createResultSet(schemas(catalog) .where(schemaMatcher) .selectMany(schema -> tables(schema, matcher(tableNamePattern))) .where(typeFilter), MetaTable.class, "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE", "REMARKS", "TYPE_CAT", "TYPE_SCHEM", "TYPE_NAME", "SELF_REFERENCING_COL_NAME", "REF_GENERATION"); }
public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) { final Predicate1<MetaSchema> schemaMatcher = namedMatcher(schemaPattern); return createResultSet(schemas(catalog).where(schemaMatcher), MetaSchema.class, "TABLE_SCHEM", "TABLE_CATALOG"); }
@Override public ExecuteResult execute(StatementHandle h, List<TypedValue> parameterValues, int maxRowsInFirstFrame) throws NoSuchStatementException { final CalciteConnectionImpl calciteConnection = getConnection(); CalciteServerStatement stmt = calciteConnection.server.getStatement(h); final Signature signature = stmt.getSignature(); MetaResultSet metaResultSet; if (signature.statementType.canUpdate()) { final Iterable<Object> iterable = _createIterable(h, signature, parameterValues, null); final Iterator<Object> iterator = iterable.iterator(); stmt.setResultSet(iterator); metaResultSet = MetaResultSet.count(h.connectionId, h.id, ((Number) iterator.next()).intValue()); } else { // Don't populate the first frame. // It's not worth saving a round-trip, since we're local. final Meta.Frame frame = new Meta.Frame(0, false, Collections.emptyList()); metaResultSet = MetaResultSet.create(h.connectionId, h.id, false, signature, frame); } return new ExecuteResult(ImmutableList.of(metaResultSet)); }
@Override protected <E> MetaResultSet createEmptyResultSet(final Class<E> clazz) { final List<ColumnMetaData> columns = fieldMetaData(clazz).columns; final CursorFactory cursorFactory = CursorFactory.deduce(columns, clazz); return createResultSet(Collections.emptyMap(), columns, cursorFactory, Frame.EMPTY); }
private <E> MetaResultSet createResultSet(Enumerable<E> enumerable, Class clazz, String... names) { final List<ColumnMetaData> columns = new ArrayList<>(); final List<Field> fields = new ArrayList<>(); final List<String> fieldNames = new ArrayList<>(); for (String name : names) { final int index = fields.size(); final String fieldName = AvaticaUtils.toCamelCase(name); final Field field; try { field = clazz.getField(fieldName); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } columns.add(columnMetaData(name, index, field.getType(), false)); fields.add(field); fieldNames.add(fieldName); } //noinspection unchecked final Iterable<Object> iterable = (Iterable<Object>) (Iterable) enumerable; return createResultSet(Collections.emptyMap(), columns, CursorFactory.record(clazz, fields, fieldNames), new Frame(0, true, iterable)); }
public Table createTable(CalciteSchema schema, String viewSql, List<String> viewSchemaPath) { final CalciteConnection connection = CalciteMetaImpl.connect(schema.root(), null); final ImmutableMap<CalciteConnectionProperty, String> map = ImmutableMap.of(CalciteConnectionProperty.CREATE_MATERIALIZATIONS,
/** Creates a {@link DataContext} and executes a callback. */ public <T> AssertThat doWithDataContext(Function<DataContext, T> fn) throws Exception { try (CalciteConnection connection = (CalciteConnection) connectionFactory.createConnection()) { final DataContext dataContext = CalciteMetaImpl.createDataContext(connection); T t = fn.apply(dataContext); Util.discard(t); return AssertThat.this; } }
@Override public Map<DatabaseProperty, Object> getDatabaseProperties(ConnectionHandle ch) { final ImmutableMap.Builder<DatabaseProperty, Object> builder = ImmutableMap.builder(); for (DatabaseProperty p : DatabaseProperty.values()) { addProperty(builder, p); } return builder.build(); }
Pat tableNamePattern, Pat columnNamePattern) { final Predicate1<String> tableNameMatcher = matcher(tableNamePattern); final Predicate1<MetaSchema> schemaMatcher = namedMatcher(schemaPattern); final Predicate1<MetaColumn> columnMatcher = namedMatcher(columnNamePattern); return createResultSet(schemas(catalog) .where(schemaMatcher) .selectMany(schema -> tables(schema, tableNameMatcher)) .selectMany(this::columns) .where(columnMatcher),
public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) { final Predicate1<MetaSchema> schemaMatcher = namedMatcher(schemaPattern); return createResultSet(schemas(catalog).where(schemaMatcher), MetaSchema.class, "TABLE_SCHEM", "TABLE_CATALOG"); }
@Override public ExecuteResult execute(StatementHandle h, List<TypedValue> parameterValues, int maxRowsInFirstFrame) throws NoSuchStatementException { final CalciteConnectionImpl calciteConnection = getConnection(); CalciteServerStatement stmt = calciteConnection.server.getStatement(h); final Signature signature = stmt.getSignature(); MetaResultSet metaResultSet; if (signature.statementType.canUpdate()) { final Iterable<Object> iterable = _createIterable(h, signature, parameterValues, null); final Iterator<Object> iterator = iterable.iterator(); stmt.setResultSet(iterator); metaResultSet = MetaResultSet.count(h.connectionId, h.id, ((Number) iterator.next()).intValue()); } else { // Don't populate the first frame. // It's not worth saving a round-trip, since we're local. final Meta.Frame frame = new Meta.Frame(0, false, Collections.emptyList()); metaResultSet = MetaResultSet.create(h.connectionId, h.id, false, signature, frame); } return new ExecuteResult(ImmutableList.of(metaResultSet)); }
public MetaResultSet getCatalogs(ConnectionHandle ch) { return createResultSet(catalogs(), MetaCatalog.class, "TABLE_CAT"); }
public MetaResultSet getTableTypes(ConnectionHandle ch) { return createResultSet(tableTypes(), MetaTableType.class, "TABLE_TYPE"); }
@Override protected <E> MetaResultSet createEmptyResultSet(final Class<E> clazz) { final List<ColumnMetaData> columns = fieldMetaData(clazz).columns; final CursorFactory cursorFactory = CursorFactory.deduce(columns, clazz); return createResultSet(Collections.emptyMap(), columns, cursorFactory, Frame.EMPTY); }