/* * Licensed to CRATE Technology GmbH ("Crate") under one or more contributor * license agreements. See the NOTICE file distributed with this work for * additional information regarding copyright ownership. Crate licenses * this file to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * * However, if you have executed another commercial license agreement * with Crate these terms will supersede the license and you may use the * software solely pursuant to the terms of the relevant commercial agreement. */ package io.crate.analyze; import com.google.common.collect.ImmutableMap; import io.crate.core.collections.TreeMapBuilder; import io.crate.metadata.*; import io.crate.metadata.doc.DocTableInfo; import io.crate.metadata.table.ColumnPolicy; import io.crate.metadata.table.TestingTableInfo; import io.crate.types.ArrayType; import io.crate.types.DataTypes; import org.apache.lucene.util.BytesRef; import org.elasticsearch.cluster.service.ClusterService; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; public final class TableDefinitions { public static final Routing SHARD_ROUTING = shardRouting("t1"); private static final Routing PARTED_ROUTING = new Routing(TreeMapBuilder.<String, Map<String, List<Integer>>>newMapBuilder() .put("nodeOne", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(".partitioned.parted.04232chj", Arrays.asList(1, 2)).map()) .put("nodeTwo", TreeMapBuilder.<String, List<Integer>>newMapBuilder().map()) .map()); private static final Routing CLUSTERED_PARTED_ROUTING = new Routing( TreeMapBuilder.<String, Map<String, List<Integer>>>newMapBuilder() .put("nodeOne", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(".partitioned.clustered_parted.04732cpp6ks3ed1o60o30c1g", Arrays.asList(1, 2)).map()) .put("nodeTwo", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(".partitioned.clustered_parted.04732cpp6ksjcc9i60o30c1g", Arrays.asList(3)).map()) .map()); public static Routing shardRouting(String tableName) { return new Routing(TreeMapBuilder.<String, Map<String, List<Integer>>>newMapBuilder() .put("nodeOne", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(tableName, Arrays.asList(1, 2)).map()) .put("nodeTwo", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(tableName, Arrays.asList(3, 4)).map()) .map()); } public static Routing shardRoutingForReplicas(String tableName) { return new Routing(TreeMapBuilder.<String, Map<String, List<Integer>>>newMapBuilder() .put("nodeOne", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(tableName, Arrays.asList(3, 4)).map()) .put("nodeTwo", TreeMapBuilder.<String, List<Integer>>newMapBuilder().put(tableName, Arrays.asList(1, 2)).map()) .map()); } public static final TableIdent USER_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "users"); public static final DocTableInfo USER_TABLE_INFO = TestingTableInfo.builder(USER_TABLE_IDENT, SHARD_ROUTING) .add("id", DataTypes.LONG, null) .add("other_id", DataTypes.LONG, null) .add("name", DataTypes.STRING, null) .add("text", DataTypes.STRING, null, Reference.IndexType.ANALYZED) .add("no_index", DataTypes.STRING, null, Reference.IndexType.NO) .add("details", DataTypes.OBJECT, null) .add("address", DataTypes.OBJECT, null, ColumnPolicy.STRICT) .add("postcode", DataTypes.STRING, Collections.singletonList("address")) .add("awesome", DataTypes.BOOLEAN, null) .add("counters", new ArrayType(DataTypes.LONG), null) .add("friends", new ArrayType(DataTypes.OBJECT), null, ColumnPolicy.DYNAMIC) .add("friends", DataTypes.LONG, Arrays.asList("id")) .add("friends", new ArrayType(DataTypes.STRING), Arrays.asList("groups")) .add("tags", new ArrayType(DataTypes.STRING), null) .add("bytes", DataTypes.BYTE, null) .add("shorts", DataTypes.SHORT, null) .add("date", DataTypes.TIMESTAMP, null) .add("shape", DataTypes.GEO_SHAPE) .add("ints", DataTypes.INTEGER, null) .add("floats", DataTypes.FLOAT, null) .addIndex(ColumnIdent.fromPath("name_text_ft"), Reference.IndexType.ANALYZED) .addPrimaryKey("id") .clusteredBy("id") .build(); public static final TableIdent USER_TABLE_IDENT_MULTI_PK = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "users_multi_pk"); public static final DocTableInfo USER_TABLE_INFO_MULTI_PK = TestingTableInfo.builder(USER_TABLE_IDENT_MULTI_PK, SHARD_ROUTING) .add("id", DataTypes.LONG, null) .add("name", DataTypes.STRING, null) .add("details", DataTypes.OBJECT, null) .add("awesome", DataTypes.BOOLEAN, null) .add("friends", new ArrayType(DataTypes.OBJECT), null, ColumnPolicy.DYNAMIC) .addPrimaryKey("id") .addPrimaryKey("name") .clusteredBy("id") .build(); public static final TableIdent USER_TABLE_IDENT_CLUSTERED_BY_ONLY = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "users_clustered_by_only"); public static final DocTableInfo USER_TABLE_INFO_CLUSTERED_BY_ONLY = TestingTableInfo.builder(USER_TABLE_IDENT_CLUSTERED_BY_ONLY, SHARD_ROUTING) .add("id", DataTypes.LONG, null) .add("name", DataTypes.STRING, null) .add("details", DataTypes.OBJECT, null) .add("awesome", DataTypes.BOOLEAN, null) .add("friends", new ArrayType(DataTypes.OBJECT), null, ColumnPolicy.DYNAMIC) .clusteredBy("id") .build(); static final TableIdent USER_TABLE_REFRESH_INTERVAL_BY_ONLY = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "user_refresh_interval"); public static final DocTableInfo USER_TABLE_INFO_REFRESH_INTERVAL_BY_ONLY = TestingTableInfo.builder(USER_TABLE_REFRESH_INTERVAL_BY_ONLY, SHARD_ROUTING) .add("id", DataTypes.LONG, null) .add("content", DataTypes.STRING, null) .clusteredBy("id") .build(); static final TableIdent NESTED_PK_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "nested_pk"); public static final DocTableInfo NESTED_PK_TABLE_INFO = TestingTableInfo.builder(NESTED_PK_TABLE_IDENT, SHARD_ROUTING) .add("id", DataTypes.LONG, null) .add("o", DataTypes.OBJECT, null, ColumnPolicy.DYNAMIC) .add("o", DataTypes.BYTE, Arrays.asList("b")) .addPrimaryKey("id") .addPrimaryKey("o.b") .clusteredBy("o.b") .build(); public static final TableIdent TEST_PARTITIONED_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "parted"); public static final DocTableInfo TEST_PARTITIONED_TABLE_INFO = new TestingTableInfo.Builder( TEST_PARTITIONED_TABLE_IDENT, new Routing(ImmutableMap.<String, Map<String, List<Integer>>>of())) .add("id", DataTypes.INTEGER, null) .add("name", DataTypes.STRING, null) .add("date", DataTypes.TIMESTAMP, null, true) .add("obj", DataTypes.OBJECT, null, ColumnPolicy.DYNAMIC) // add 3 partitions/simulate already done inserts .addPartitions( new PartitionName("parted", Arrays.asList(new BytesRef("1395874800000"))).asIndexName(), new PartitionName("parted", Arrays.asList(new BytesRef("1395961200000"))).asIndexName(), new PartitionName("parted", new ArrayList<BytesRef>() {{ add(null); }}).asIndexName()) .build(); public static final TableIdent TEST_EMPTY_PARTITIONED_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "empty_parted"); public static final DocTableInfo TEST_EMPTY_PARTITIONED_TABLE_INFO = new TestingTableInfo.Builder( TEST_EMPTY_PARTITIONED_TABLE_IDENT, new Routing(ImmutableMap.of())) .add("name", DataTypes.STRING, null) .add("date", DataTypes.TIMESTAMP, null, true) .build(); public static final TableIdent PARTED_PKS_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "parted_pks"); public static final DocTableInfo PARTED_PKS_TI = new TestingTableInfo.Builder( PARTED_PKS_IDENT, PARTED_ROUTING) .add("id", DataTypes.INTEGER, null) .add("name", DataTypes.STRING, null) .add("date", DataTypes.TIMESTAMP, null, true) .add("obj", DataTypes.OBJECT, null, ColumnPolicy.DYNAMIC) // add 3 partitions/simulate already done inserts .addPartitions( new PartitionName("parted", Arrays.asList(new BytesRef("1395874800000"))).asIndexName(), new PartitionName("parted", Arrays.asList(new BytesRef("1395961200000"))).asIndexName() ) .addPrimaryKey("id") .addPrimaryKey("date") .clusteredBy("id") .build(); public static final TableIdent TEST_MULTIPLE_PARTITIONED_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "multi_parted"); public static final DocTableInfo TEST_MULTIPLE_PARTITIONED_TABLE_INFO = new TestingTableInfo.Builder( TEST_MULTIPLE_PARTITIONED_TABLE_IDENT, new Routing(ImmutableMap.<String, Map<String, List<Integer>>>of())) .add("id", DataTypes.INTEGER, null) .add("date", DataTypes.TIMESTAMP, null, true) .add("num", DataTypes.LONG, null) .add("obj", DataTypes.OBJECT, null, ColumnPolicy.DYNAMIC) .add("obj", DataTypes.STRING, Arrays.asList("name"), true) // add 3 partitions/simulate already done inserts .addPartitions( new PartitionName("multi_parted", Arrays.asList(new BytesRef("1395874800000"), new BytesRef("0"))).asIndexName(), new PartitionName("multi_parted", Arrays.asList(new BytesRef("1395961200000"), new BytesRef("-100"))).asIndexName(), new PartitionName("multi_parted", Arrays.asList(null, new BytesRef("-100"))).asIndexName()) .build(); static final TableIdent TEST_NESTED_PARTITIONED_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "nested_parted"); public static final DocTableInfo TEST_NESTED_PARTITIONED_TABLE_INFO = new TestingTableInfo.Builder( TEST_NESTED_PARTITIONED_TABLE_IDENT, new Routing(ImmutableMap.<String, Map<String, List<Integer>>>of())) .add("id", DataTypes.INTEGER, null) .add("date", DataTypes.TIMESTAMP, null, true) .add("obj", DataTypes.OBJECT, null, ColumnPolicy.DYNAMIC) .add("obj", DataTypes.STRING, Arrays.asList("name"), true) // add 3 partitions/simulate already done inserts .addPartitions( new PartitionName("nested_parted", Arrays.asList(new BytesRef("1395874800000"), new BytesRef("Trillian"))).asIndexName(), new PartitionName("nested_parted", Arrays.asList(new BytesRef("1395961200000"), new BytesRef("Ford"))).asIndexName(), new PartitionName("nested_parted", Arrays.asList(null, new BytesRef("Zaphod"))).asIndexName()) .build(); public static final TableIdent TEST_DOC_TRANSACTIONS_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "transactions"); public static final DocTableInfo TEST_DOC_TRANSACTIONS_TABLE_INFO = new TestingTableInfo.Builder( TEST_DOC_TRANSACTIONS_TABLE_IDENT, new Routing(ImmutableMap.<String, Map<String, List<Integer>>>of())) .add("id", DataTypes.LONG, null) .add("sender", DataTypes.STRING, null) .add("recipient", DataTypes.STRING, null) .add("amount", DataTypes.DOUBLE, null) .add("timestamp", DataTypes.TIMESTAMP, null) .build(); public static final TableIdent DEEPLY_NESTED_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "deeply_nested"); public static final DocTableInfo DEEPLY_NESTED_TABLE_INFO = new TestingTableInfo.Builder( DEEPLY_NESTED_TABLE_IDENT, new Routing(ImmutableMap.<String, Map<String, List<Integer>>>of())) .add("details", DataTypes.OBJECT, null, ColumnPolicy.DYNAMIC) .add("details", DataTypes.BOOLEAN, Arrays.asList("awesome")) .add("details", DataTypes.OBJECT, Arrays.asList("stuff"), ColumnPolicy.DYNAMIC) .add("details", DataTypes.STRING, Arrays.asList("stuff", "name")) .add("details", new ArrayType(DataTypes.OBJECT), Arrays.asList("arguments")) .add("details", DataTypes.DOUBLE, Arrays.asList("arguments", "quality")) .add("details", DataTypes.STRING, Arrays.asList("arguments", "name")) .add("tags", new ArrayType(DataTypes.OBJECT), null) .add("tags", DataTypes.STRING, Arrays.asList("name")) .add("tags", new ArrayType(DataTypes.OBJECT), Arrays.asList("metadata")) .add("tags", DataTypes.LONG, Arrays.asList("metadata", "id")) .build(); public static final TableIdent IGNORED_NESTED_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "ignored_nested"); public static final DocTableInfo IGNORED_NESTED_TABLE_INFO = new TestingTableInfo.Builder( IGNORED_NESTED_TABLE_IDENT, new Routing(ImmutableMap.<String, Map<String, List<Integer>>>of())) .add("details", DataTypes.OBJECT, null, ColumnPolicy.IGNORED) .build(); public static final TableIdent TEST_DOC_LOCATIONS_TABLE_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "locations"); public static final DocTableInfo TEST_DOC_LOCATIONS_TABLE_INFO = TestingTableInfo.builder(TEST_DOC_LOCATIONS_TABLE_IDENT, SHARD_ROUTING) .add("id", DataTypes.LONG, null) .add("loc", DataTypes.GEO_POINT, null) .build(); public static final DocTableInfo TEST_CLUSTER_BY_STRING_TABLE_INFO = TestingTableInfo.builder(new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "bystring"), SHARD_ROUTING) .add("name", DataTypes.STRING, null) .add("score", DataTypes.DOUBLE, null) .addPrimaryKey("name") .clusteredBy("name") .build(); public static final TableIdent CLUSTERED_PARTED_IDENT = new TableIdent(Schemas.DEFAULT_SCHEMA_NAME, "clustered_parted"); public static final DocTableInfo CLUSTERED_PARTED = new TestingTableInfo.Builder( CLUSTERED_PARTED_IDENT, CLUSTERED_PARTED_ROUTING) .add("id", DataTypes.INTEGER, null) .add("date", DataTypes.TIMESTAMP, null, true) .add("city", DataTypes.STRING, null) .clusteredBy("city") .addPartitions( new PartitionName("clustered_parted", Arrays.asList(new BytesRef("1395874800000"))).asIndexName(), new PartitionName("clustered_parted", Arrays.asList(new BytesRef("1395961200000"))).asIndexName()) .build(); public static TestingBlobTableInfo createBlobTable(TableIdent ident, ClusterService clusterService) { return new TestingBlobTableInfo( ident, ident.indexName(), clusterService, 5, new BytesRef("0"), ImmutableMap.<String, Object>of(), null, SHARD_ROUTING ); } }