You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/08/27 11:15:52 UTC
[ignite-3] 02/02: Move SchemaBuilders to ignite-api.
This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch ignite-15382
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit 6d63b682f10287a4b462e8adb251c9dbe344b347
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Fri Aug 27 14:15:37 2021 +0300
Move SchemaBuilders to ignite-api.
---
.../org/apache/ignite/schema/SchemaBuilders.java | 94 ++++++++++++++++++----
modules/schema/pom.xml | 9 +++
.../schema/builder/SchemaBuilderFactoryImpl.java | 71 ++++++++++++++++
...nite.schema.SchemaBuilders$SchemaBuilderFactory | 1 +
4 files changed, 160 insertions(+), 15 deletions(-)
diff --git a/modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java b/modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
similarity index 53%
rename from modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
rename to modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
index fa806c0..de90628 100644
--- a/modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
+++ b/modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
@@ -17,12 +17,8 @@
package org.apache.ignite.schema;
-import org.apache.ignite.internal.schema.builder.HashIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.PartialIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.PrimaryKeyBuilderImpl;
-import org.apache.ignite.internal.schema.builder.SchemaTableBuilderImpl;
-import org.apache.ignite.internal.schema.builder.SortedIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.TableColumnBuilderImpl;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
import org.apache.ignite.schema.builder.HashIndexBuilder;
import org.apache.ignite.schema.builder.PartialIndexBuilder;
import org.apache.ignite.schema.builder.PrimaryIndexBuilder;
@@ -34,6 +30,11 @@ import org.apache.ignite.schema.builder.TableColumnBuilder;
* Schema builder helper.
*/
public final class SchemaBuilders {
+ /** Default factory. */
+ private static SchemaBuilderFactory FACTORY = ServiceLoader.load(SchemaBuilderFactory.class)
+ .findFirst()
+ .orElseThrow(() -> new ServiceConfigurationError("Failed to locate SchemaBuilderFactory."));
+
/**
* Create table descriptor from classes.
*
@@ -44,9 +45,7 @@ public final class SchemaBuilders {
* @return Table descriptor for given key-value pair.
*/
public static SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass) {
- // TODO IGNITE-13749: implement schema generation from classes.
-
- return null;
+ return FACTORY.buildSchema(schemaName, tableName, keyClass, valueClass);
}
/**
@@ -57,7 +56,7 @@ public final class SchemaBuilders {
* @return Table descriptor builder.
*/
public static SchemaTableBuilder tableBuilder(String schemaName, String tableName) {
- return new SchemaTableBuilderImpl(schemaName, tableName);
+ return FACTORY.tableBuilder(schemaName, tableName);
}
/**
@@ -68,7 +67,7 @@ public final class SchemaBuilders {
* @return Column builder.
*/
public static TableColumnBuilder column(String name, ColumnType type) {
- return new TableColumnBuilderImpl(name, type);
+ return FACTORY.column(name, type);
}
/**
@@ -77,7 +76,7 @@ public final class SchemaBuilders {
* @return Primary index builder.
*/
public static PrimaryIndexBuilder pkIndex() {
- return new PrimaryKeyBuilderImpl();
+ return FACTORY.pkIndex();
}
/**
@@ -87,7 +86,7 @@ public final class SchemaBuilders {
* @return Sorted index builder.
*/
public static SortedIndexBuilder sortedIndex(String name) {
- return new SortedIndexBuilderImpl(name);
+ return FACTORY.sortedIndex(name);
}
/**
@@ -97,7 +96,7 @@ public final class SchemaBuilders {
* @return Partial index builder.
*/
public static PartialIndexBuilder partialIndex(String name) {
- return new PartialIndexBuilderImpl(name);
+ return FACTORY.partialIndex(name);
}
/**
@@ -107,10 +106,75 @@ public final class SchemaBuilders {
* @return Hash index builder.
*/
public static HashIndexBuilder hashIndex(String name) {
- return new HashIndexBuilderImpl(name);
+ return FACTORY.hashIndex(name);
}
// Stub.
private SchemaBuilders() {
}
+
+ /**
+ * Schema builders factory service interface.
+ */
+ public static interface SchemaBuilderFactory {
+ /**
+ * Create table descriptor from classes.
+ *
+ * @param schemaName Schema name.
+ * @param tableName Table name.
+ * @param keyClass Key class.
+ * @param valueClass Value class.
+ * @return Table descriptor for given key-value pair.
+ */
+ SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass);
+
+ /**
+ * Creates table descriptor builder.
+ *
+ * @param schemaName Schema name.
+ * @param tableName Table name.
+ * @return Table descriptor builder.
+ */
+ SchemaTableBuilder tableBuilder(String schemaName, String tableName);
+
+ /**
+ * Creates table column builder.
+ *
+ * @param name Column name.
+ * @param type Column type.
+ * @return Column builder.
+ */
+ TableColumnBuilder column(String name, ColumnType type);
+
+ /**
+ * Creates primary index builder.
+ *
+ * @return Primary index builder.
+ */
+ PrimaryIndexBuilder pkIndex();
+
+ /**
+ * Creates sorted index builder.
+ *
+ * @param name Index name.
+ * @return Sorted index builder.
+ */
+ SortedIndexBuilder sortedIndex(String name);
+
+ /**
+ * Creates partial index builder.
+ *
+ * @param name Index name.
+ * @return Partial index builder.
+ */
+ PartialIndexBuilder partialIndex(String name);
+
+ /**
+ * Creates hash index builder.
+ *
+ * @param name Index name.
+ * @return Hash index builder.
+ */
+ HashIndexBuilder hashIndex(String name);
+ }
}
diff --git a/modules/schema/pom.xml b/modules/schema/pom.xml
index 783b5f0..e2ece51 100644
--- a/modules/schema/pom.xml
+++ b/modules/schema/pom.xml
@@ -105,4 +105,13 @@
<scope>test</scope>
</dependency>
</dependencies>
+
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </build>
</project>
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java
new file mode 100644
index 0000000..e1a5ed1
--- /dev/null
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF 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.
+ */
+
+package org.apache.ignite.internal.schema.builder;
+
+import org.apache.ignite.schema.ColumnType;
+import org.apache.ignite.schema.SchemaBuilders;
+import org.apache.ignite.schema.SchemaTable;
+import org.apache.ignite.schema.builder.HashIndexBuilder;
+import org.apache.ignite.schema.builder.PartialIndexBuilder;
+import org.apache.ignite.schema.builder.PrimaryIndexBuilder;
+import org.apache.ignite.schema.builder.SchemaTableBuilder;
+import org.apache.ignite.schema.builder.SortedIndexBuilder;
+import org.apache.ignite.schema.builder.TableColumnBuilder;
+
+/**
+ * Schema builders factory service implementation.
+ */
+public class SchemaBuilderFactoryImpl implements SchemaBuilders.SchemaBuilderFactory {
+
+ /** {@inheritDoc} */
+ @Override public SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass) {
+ // TODO IGNITE-13749: implement schema generation from classes.
+
+ throw new UnsupportedOperationException("Not implemented yet: IGNITE-13749");
+ }
+
+ /** {@inheritDoc} */
+ @Override public SchemaTableBuilder tableBuilder(String schemaName, String tableName) {
+ return new SchemaTableBuilderImpl(schemaName, tableName);
+ }
+
+ /** {@inheritDoc} */
+ @Override public TableColumnBuilder column(String name, ColumnType type) {
+ return new TableColumnBuilderImpl(name, type);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PrimaryIndexBuilder pkIndex() {
+ return new PrimaryKeyBuilderImpl();
+ }
+
+ /** {@inheritDoc} */
+ @Override public SortedIndexBuilder sortedIndex(String name) {
+ return new SortedIndexBuilderImpl(name);
+ }
+
+ /** {@inheritDoc} */
+ @Override public PartialIndexBuilder partialIndex(String name) {
+ return new PartialIndexBuilderImpl(name);
+ }
+
+ /** {@inheritDoc} */
+ @Override public HashIndexBuilder hashIndex(String name) {
+ return new HashIndexBuilderImpl(name);
+ }
+}
diff --git a/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory
new file mode 100644
index 0000000..f04201a
--- /dev/null
+++ b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory
@@ -0,0 +1 @@
+org.apache.ignite.internal.schema.builder.SchemaBuilderFactoryImpl
\ No newline at end of file