From 00a9259afdeca0390122b1c61cb3e65862bcfa17 Mon Sep 17 00:00:00 2001 From: Shailesh Jain Date: Sun, 31 Mar 2019 17:16:35 +0530 Subject: [PATCH 1/7] Adding Schema class, ColumnBuilder class. --- .../exceptions/InvalidSchemaException.java | 7 ++ .../core/models/migrations/BluePrint.java | 13 +++ .../core/models/migrations/Column.java | 4 + .../core/models/migrations/ColumnBuilder.java | 17 ++++ .../core/models/migrations/Schema.java | 84 +++++++++++++++++++ 5 files changed, 125 insertions(+) create mode 100644 src/main/java/com/opentek/catapult/core/exceptions/InvalidSchemaException.java create mode 100644 src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java create mode 100644 src/main/java/com/opentek/catapult/core/models/migrations/Schema.java diff --git a/src/main/java/com/opentek/catapult/core/exceptions/InvalidSchemaException.java b/src/main/java/com/opentek/catapult/core/exceptions/InvalidSchemaException.java new file mode 100644 index 0000000..16b03df --- /dev/null +++ b/src/main/java/com/opentek/catapult/core/exceptions/InvalidSchemaException.java @@ -0,0 +1,7 @@ +package com.opentek.catapult.core.exceptions; + +public class InvalidSchemaException extends Exception { + public InvalidSchemaException(String message) { + super(message); + } +} diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java index 67a4225..52bf702 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java @@ -1,5 +1,18 @@ package com.opentek.catapult.core.models.migrations; +import java.util.ArrayList; + public class BluePrint { + private final static String INTEGER = "INT"; + private String tableName; + private ArrayList columns; +// protected ColumnBuilder + protected BluePrint(String tableName){ + this.tableName = tableName; + this.columns = new ArrayList<>(); + } + public ColumnBuilder integer(String columnName){ + return new ColumnBuilder(columnName,INTEGER, columns); + } } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Column.java b/src/main/java/com/opentek/catapult/core/models/migrations/Column.java index 22de44a..4723975 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/Column.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Column.java @@ -15,6 +15,10 @@ public Column(String type, String name, String defaultValue, String reference, b this.primary = primary; } + public Column(String columnName) { + this.name = columnName; + } + public String getType() { return type; } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java new file mode 100644 index 0000000..263c672 --- /dev/null +++ b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java @@ -0,0 +1,17 @@ +package com.opentek.catapult.core.models.migrations; + +import java.util.ArrayList; + +public class ColumnBuilder { + private String columnName; + private Column column; + private ArrayList columns; + public ColumnBuilder(String columnName, String datatype, ArrayList columns) { + this.columns = columns; + this.columnName = columnName; + this.column = new Column(this.columnName); + } + public ColumnBuilder unique(){ + return this; + } +} diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java new file mode 100644 index 0000000..a6b8d9c --- /dev/null +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java @@ -0,0 +1,84 @@ +package com.opentek.catapult.core.models.migrations; + +import com.opentek.catapult.core.exceptions.InvalidSchemaException; + +import java.util.concurrent.Future; + +/** + * DATATYPE'S Available: + * Numeric: + * tinyint + * smallint + * mediumint + * int + * bigint + * + * decimal + * float + * double + * real + * + * bit + * boolean + * serial + * + * Datetime: + * date + * datetime + * timestamp + * time + * year + * + * Unicode String: + * nchar + * nvarchar + * ntext + * + * String: + * varchar + * char + * + * tinytext + * text + * mediumtext + * longtext + * + * binary + * varbinary + * + * tinyblob + * blob + * mediumblob + * longblob + * + * enum + * set + * + * Miscellaneous: + * cblob + * xml + * json + * + * Schema methods For DDL + * create + * rename + * drop + * dropIfExists + * alter + * hasTable + * table - to modify the table schema + */ +public class Schema { + /** + * Creates a table if is not exists in the database. + * @param tableName - name of the table to be created + * @param callback - a callback which will give the call to the get method. + */ + public void create(String tableName, Future callback) throws InvalidSchemaException { + if(tableName == null || tableName.equals("")){ + throw new InvalidSchemaException("Table name not valid"); + } + BluePrint bluePrint = callback.get(); + String query = "CREATE TABLE IF NOT EXISTS " + tableName + "("; + } +} From 226afa44dc817b77a3c0926b8736b320d51a1d22 Mon Sep 17 00:00:00 2001 From: Shailesh Jain Date: Sun, 31 Mar 2019 17:43:29 +0530 Subject: [PATCH 2/7] ColumnBuilder added. --- .../core/models/migrations/BluePrint.java | 67 ++++++++++++++++++- .../core/models/migrations/Column.java | 16 +++-- .../core/models/migrations/ColumnBuilder.java | 28 +++++++- .../core/models/migrations/Schema.java | 53 --------------- 4 files changed, 105 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java index 52bf702..96d8eca 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java @@ -1,9 +1,70 @@ package com.opentek.catapult.core.models.migrations; +import com.opentek.catapult.core.exceptions.InvalidSchemaException; + import java.util.ArrayList; +/** + * DATATYPE'S Available: + * Numeric: + * tinyint + * smallint + * mediumint + * int + * bigint + * + * decimal + * float + * double + * real + * + * bit + * boolean + * serial + * + * Datetime: + * date + * datetime + * timestamp + * time + * year + * + * Unicode String: + * nchar + * nvarchar + * ntext + * + * String: + * varchar + * char + * + * tinytext + * text + * mediumtext + * longtext + * + * binary + * varbinary + * + * tinyblob + * blob + * mediumblob + * longblob + * + * enum + * set + * + * Miscellaneous: + * cblob + * xml + * json + */ public class BluePrint { + private final static String TINYINT = "TINYINT"; + private final static String SMALLINT = "SMALLINT"; + private final static String MEDIUMINT = "MEDIUMINT"; private final static String INTEGER = "INT"; + private final static String LONGINT = "LONGINT"; private String tableName; private ArrayList columns; // protected ColumnBuilder @@ -12,7 +73,11 @@ protected BluePrint(String tableName){ this.columns = new ArrayList<>(); } - public ColumnBuilder integer(String columnName){ + public ColumnBuilder integer(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); return new ColumnBuilder(columnName,INTEGER, columns); } + + } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Column.java b/src/main/java/com/opentek/catapult/core/models/migrations/Column.java index 4723975..93ab8b4 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/Column.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Column.java @@ -4,19 +4,27 @@ public class Column { private String type, name, defaultValue, reference; - private boolean unique, primary; + private boolean unique, primary, notnull; - public Column(String type, String name, String defaultValue, String reference, boolean unique, boolean primary) { + public boolean isNotnull() { + return notnull; + } + + public void setNotnull(boolean notnull) { + this.notnull = notnull; + } + + public Column(String type, String name, String defaultValue, String reference, boolean unique, boolean primary, boolean notnull) { this.type = type; this.name = name; this.defaultValue = defaultValue; this.reference = reference; this.unique = unique; this.primary = primary; + this.notnull = notnull; } - public Column(String columnName) { - this.name = columnName; + public Column() { } public String getType() { diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java index 263c672..48ce748 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java @@ -1,5 +1,6 @@ package com.opentek.catapult.core.models.migrations; + import java.util.ArrayList; public class ColumnBuilder { @@ -9,9 +10,34 @@ public class ColumnBuilder { public ColumnBuilder(String columnName, String datatype, ArrayList columns) { this.columns = columns; this.columnName = columnName; - this.column = new Column(this.columnName); + this.column = new Column(); + this.column.setName(columnName); + this.column.setType(datatype); } public ColumnBuilder unique(){ + this.column.setUnique(true); + return this; + } + public ColumnBuilder defaultValue(String value){ + this.column.setDefaultValue(value); + return this; + } + + public ColumnBuilder primaryKey(){ + this.column.setPrimary(true); return this; } + public ColumnBuilder reference(String ref){ + if(ref == null || ref.equals("")) + throw new IllegalArgumentException("invalid reference"); + this.column.setReference(ref); + return this; + } + public ColumnBuilder notnull(boolean notnull){ + this.column.setNotnull(notnull); + return this; + } + public void build(){ + this.columns.add(this.column); + } } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java index a6b8d9c..248a8ac 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java @@ -5,59 +5,6 @@ import java.util.concurrent.Future; /** - * DATATYPE'S Available: - * Numeric: - * tinyint - * smallint - * mediumint - * int - * bigint - * - * decimal - * float - * double - * real - * - * bit - * boolean - * serial - * - * Datetime: - * date - * datetime - * timestamp - * time - * year - * - * Unicode String: - * nchar - * nvarchar - * ntext - * - * String: - * varchar - * char - * - * tinytext - * text - * mediumtext - * longtext - * - * binary - * varbinary - * - * tinyblob - * blob - * mediumblob - * longblob - * - * enum - * set - * - * Miscellaneous: - * cblob - * xml - * json * * Schema methods For DDL * create From f1aa4725accf4f01059ffb1fd374ea88736f4b64 Mon Sep 17 00:00:00 2001 From: Shailesh Jain Date: Sun, 31 Mar 2019 19:30:44 +0530 Subject: [PATCH 3/7] Blueprint class --- .../core/models/migrations/BluePrint.java | 185 +++++++++++++++++- .../core/models/migrations/Column.java | 9 + .../core/models/migrations/ColumnBuilder.java | 5 + 3 files changed, 195 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java index 96d8eca..1d293bb 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java @@ -64,7 +64,34 @@ public class BluePrint { private final static String SMALLINT = "SMALLINT"; private final static String MEDIUMINT = "MEDIUMINT"; private final static String INTEGER = "INT"; - private final static String LONGINT = "LONGINT"; + private final static String BIGINT = "BIGINT"; + private final static String DECIMAL = "DECIMAL"; + private final static String FLOAT = "FLOAT"; + private final static String DOUBLE = "DOUBLE"; + private final static String REAL = "REAL"; + private static final String BIT = "BIT"; + private static final String SERIAL = "SERIAL"; + private static final String DATE = "DATE"; + private static final String DATETIME = "DATETIME"; + private static final String TIMESTAMP = "TIMESTAMP"; + private static final String TIME = "TIME"; + private static final String YEAR = "YEAR"; + private static final String CHAR = "CHAR"; + private static final String VARCHAR = "VARCHAR"; + private static final String TINYTEXT = "TINYTEXT"; + private static final String TEXT = "TEXT"; + private static final String MEDIUMTEXT = "MEDIUMTEXT"; + private static final String LONGTEXT = "LONGTEXT"; + private static final String BINARY = "BINARY"; + private static final String VARBINARY = "VARBINARY"; + private static final String TINYBLOB = "TINYBLOB"; + private static final String BLOB = "BLOB"; + private static final String MEDIUMBLOB = "MEDIUMBLOB"; + private static final String LONGBLOB = "LONGBLOB"; + private static final String ENUM = "ENUM"; + private static final String SET = "SET"; + + private String tableName; private ArrayList columns; // protected ColumnBuilder @@ -72,12 +99,162 @@ protected BluePrint(String tableName){ this.tableName = tableName; this.columns = new ArrayList<>(); } - + public ColumnBuilder tinyint(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,TINYINT, columns); + } + public ColumnBuilder smallint(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,SMALLINT, columns); + } + public ColumnBuilder mediumint(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,MEDIUMINT, columns); + } public ColumnBuilder integer(String columnName) throws InvalidSchemaException { if(columnName == null || columnName.equals("")) throw new InvalidSchemaException("Column Name is invalid"); return new ColumnBuilder(columnName,INTEGER, columns); } - - + public ColumnBuilder bigint(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,BIGINT, columns); + } + public ColumnBuilder decimal(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,DECIMAL, columns); + } + public ColumnBuilder floatType(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,FLOAT, columns); + } + public ColumnBuilder doubleType(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,DOUBLE, columns); + } + public ColumnBuilder real(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,REAL, columns); + } + public ColumnBuilder bit(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,BIT, columns); + } + public ColumnBuilder serial(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,SERIAL, columns); + } + public ColumnBuilder date(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,DATE, columns); + } + public ColumnBuilder datetime(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,DATETIME, columns); + } + public ColumnBuilder timestamp(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,TIMESTAMP, columns); + } + public ColumnBuilder time(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,TIME, columns); + } + public ColumnBuilder year(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,YEAR, columns); + } + public ColumnBuilder varchar(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,VARCHAR, columns); + } + public ColumnBuilder character(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,CHAR, columns); + } + public ColumnBuilder tinytext(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,TINYTEXT, columns); + } + public ColumnBuilder text(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,TEXT, columns); + } + public ColumnBuilder mediumtext(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,MEDIUMTEXT, columns); + } + public ColumnBuilder longtext(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,LONGTEXT, columns); + } + public ColumnBuilder binary(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,BINARY, columns); + } + public ColumnBuilder varbinary(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,VARBINARY, columns); + } + public ColumnBuilder tinyblob(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,TINYBLOB, columns); + } + public ColumnBuilder blob(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,BLOB, columns); + } + public ColumnBuilder mediumblob(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,MEDIUMBLOB, columns); + } + public ColumnBuilder longblob(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,LONGBLOB, columns); + } + public ColumnBuilder enumuration(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,ENUM, columns); + } + public ColumnBuilder set(String columnName) throws InvalidSchemaException { + if(columnName == null || columnName.equals("")) + throw new InvalidSchemaException("Column Name is invalid"); + return new ColumnBuilder(columnName,SET, columns); + } + + public String buildQuery(){ + String query = "("; + for (Column col: + ) { + + } + } } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Column.java b/src/main/java/com/opentek/catapult/core/models/migrations/Column.java index 93ab8b4..92c6d17 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/Column.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Column.java @@ -4,6 +4,7 @@ public class Column { private String type, name, defaultValue, reference; + private int length; private boolean unique, primary, notnull; public boolean isNotnull() { @@ -27,6 +28,14 @@ public Column(String type, String name, String defaultValue, String reference, b public Column() { } + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + public String getType() { return type; } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java index 48ce748..91c2adf 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java @@ -40,4 +40,9 @@ public ColumnBuilder notnull(boolean notnull){ public void build(){ this.columns.add(this.column); } + public ColumnBuilder length(int length){ + if(length < 0) + throw new IllegalArgumentException("length cannot be negative"); + return this; + } } From 6beac579f0541c84e340b417c524d454dcfefa21 Mon Sep 17 00:00:00 2001 From: Shailesh Jain Date: Sun, 31 Mar 2019 19:50:57 +0530 Subject: [PATCH 4/7] buildQuery in Blueprint --- .../core/models/migrations/BluePrint.java | 22 ++++++++++++++++--- .../core/models/migrations/Schema.java | 3 ++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java index 1d293bb..e97cfcd 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java @@ -252,9 +252,25 @@ public ColumnBuilder set(String columnName) throws InvalidSchemaException { public String buildQuery(){ String query = "("; - for (Column col: - ) { - + for (int i = 0; i 0){ + query += "(" + col.getLength() + ") "; + } + if(col.isNotnull()) + query += "NOT NULL "; + if(col.isPrimary()) + query += "PRIMARY KEY "; + if(col.isUnique()) + query += "UNIQUE "; + if(col.getDefaultValue() != null) + query += "DEFAULT '" + col.getDefaultValue() + "'"; +// if(col.getReference()) + query += i == columns.size() - 1?",": ""; + } + query += ")"; + return query; } } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java index 248a8ac..24a2c97 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java @@ -2,6 +2,7 @@ import com.opentek.catapult.core.exceptions.InvalidSchemaException; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; /** @@ -21,7 +22,7 @@ public class Schema { * @param tableName - name of the table to be created * @param callback - a callback which will give the call to the get method. */ - public void create(String tableName, Future callback) throws InvalidSchemaException { + public void create(String tableName, Future callback) throws InvalidSchemaException, ExecutionException, InterruptedException { if(tableName == null || tableName.equals("")){ throw new InvalidSchemaException("Table name not valid"); } From 39e7b2ee6e80bc3bb9d01135fc9a2cf785718276 Mon Sep 17 00:00:00 2001 From: Shailesh Jain Date: Sun, 31 Mar 2019 20:34:11 +0530 Subject: [PATCH 5/7] changes buildQuery in Blueprint --- .../core/models/migrations/BluePrint.java | 20 +++++++++--------- .../core/models/migrations/ColumnBuilder.java | 5 +++-- .../core/models/migrations/Schema.java | 13 ++++++++---- .../catapult/core/services/ModelService.java | 2 +- .../core/models/migrations/BluePrint.class | Bin 340 -> 7311 bytes .../core/models/migrations/Column.class | Bin 2918 -> 3393 bytes .../catapult/core/services/ModelService.class | Bin 3080 -> 3082 bytes 7 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java index e97cfcd..eeda5f0 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java @@ -251,26 +251,26 @@ public ColumnBuilder set(String columnName) throws InvalidSchemaException { } public String buildQuery(){ - String query = "("; + StringBuilder query = new StringBuilder("("); for (int i = 0; i 0){ - query += "(" + col.getLength() + ") "; + query.append("(").append(col.getLength()).append(") "); } if(col.isNotnull()) - query += "NOT NULL "; + query.append("NOT NULL "); if(col.isPrimary()) - query += "PRIMARY KEY "; + query.append("PRIMARY KEY "); if(col.isUnique()) - query += "UNIQUE "; + query.append("UNIQUE "); if(col.getDefaultValue() != null) - query += "DEFAULT '" + col.getDefaultValue() + "'"; + query.append("DEFAULT '").append(col.getDefaultValue()).append("'"); // if(col.getReference()) - query += i == columns.size() - 1?",": ""; + query.append(i == columns.size() - 1 ? "" : ","); } - query += ")"; - return query; + query.append(")"); + return query.toString(); } } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java index 91c2adf..db30bdc 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/ColumnBuilder.java @@ -33,8 +33,8 @@ public ColumnBuilder reference(String ref){ this.column.setReference(ref); return this; } - public ColumnBuilder notnull(boolean notnull){ - this.column.setNotnull(notnull); + public ColumnBuilder notnull(){ + this.column.setNotnull(true); return this; } public void build(){ @@ -43,6 +43,7 @@ public void build(){ public ColumnBuilder length(int length){ if(length < 0) throw new IllegalArgumentException("length cannot be negative"); + this.column.setLength(length); return this; } } diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java index 24a2c97..2e95ec0 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/Schema.java @@ -4,6 +4,8 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.function.Consumer; +import java.util.function.Predicate; /** * @@ -20,13 +22,16 @@ public class Schema { /** * Creates a table if is not exists in the database. * @param tableName - name of the table to be created - * @param callback - a callback which will give the call to the get method. + * @param consumer - a callback which will give the call to the get method. */ - public void create(String tableName, Future callback) throws InvalidSchemaException, ExecutionException, InterruptedException { + public static void create(String tableName, Consumer consumer) throws InvalidSchemaException{ if(tableName == null || tableName.equals("")){ throw new InvalidSchemaException("Table name not valid"); } - BluePrint bluePrint = callback.get(); - String query = "CREATE TABLE IF NOT EXISTS " + tableName + "("; + BluePrint bluePrint = new BluePrint(tableName); + consumer.accept(bluePrint); + String query = "CREATE TABLE IF NOT EXISTS " + tableName; + query += bluePrint.buildQuery(); + System.out.println(query); } } diff --git a/src/main/java/com/opentek/catapult/core/services/ModelService.java b/src/main/java/com/opentek/catapult/core/services/ModelService.java index 892dc1d..6547e2c 100644 --- a/src/main/java/com/opentek/catapult/core/services/ModelService.java +++ b/src/main/java/com/opentek/catapult/core/services/ModelService.java @@ -66,7 +66,7 @@ public static List extractColumns(String[] args) throws InvalidModelExce throw new InvalidModelException("Invalid model given"); } } - Column column = new Column(type, columnName, defaultValue, ref, unique, primary); + Column column = new Column(type, columnName, defaultValue, ref, unique, primary, false); columns.add(column); } return columns; diff --git a/target/classes/com/opentek/catapult/core/models/migrations/BluePrint.class b/target/classes/com/opentek/catapult/core/models/migrations/BluePrint.class index 3c7f1824818b8f1050f52c07c27cf9aec5c12344..07cbb14dbbbf6ec7ee497673f8b49d9218ed67c8 100644 GIT binary patch literal 7311 zcmbW5dvp}l9ml_uY_fNk4Ugp|h#Ev84=}}|)&{W&S#V*q3E52`h>ywc5C--Uc4v|J zsE;bPzF*iXJPZPmWcX?srFbK0KM_MF<&O22nz69!@anE7Mp z-tWElcYmMzyLWywJ8ymV(mntS@arHVcqo7n9`@srASx~KsKEDw*onvdcwFF#AOv># z@dH1e6j&0(7(68q6<8+lv_MRtT_7&dAB1yq4Pfs{a6K=b1nfoFr5i(L}tIeB^BkKF=$WaCf}^D!(hFUZS_vh5{- zy;8g^@QN(=3GA2Us{#jP`I^A%0zVY^k-$M|@P;36D)1+x@!n`WsURF%uWnMCGHR~B zDPa`!Tz|8In#K8C(NJ?nkD4iI3Phs4B^EQs2ihZT(e8G$?&meKG}5J@x;47gYHEut zj&iVqswJ_G7CNYI>*#KcMHKkDBC@@*H7Z*Zk*=tezP6SmJB2Kg(RNk?vPdLb+B?~6 zHTilYE%f4Be32~tJuO{UO~_>=Bda)}&nkizo+U)ABfiwC5-{G<)yvswJW@B!TVoxq zG`EVfxg|{Va(5)&-A?vIgsuXH+LzJdYL=1lr}CLnHdja-+{! zr*j?Wxx#7X`RL@Skt_8ZdTx+a1sx{>ay75D%+`{gNoxhp9kk+X1-&L=sHqL@>Oh%1 z7}=cC2F&>IBo(u2CSzg*vRYa%WzD*uSFK+wFl>E#ztxo1QaT57kJe`Ls*xNVU~Gcv zd`Sky6uyEc`z!l&uBy7IF<_Lwv}$mqkcFYkV-S!9@0jcWd#xtlpr+EBf0J5Bt&_EY zEYy@C8H5a#p>5`@KC1{?tdO%Mlej38Ncu&FEZd_Rl=FZiIa2P)e;pf;I!u#^_ft>L$ zK2%Uq&)#3)mpqU0j%01TI~HTZN3tQ**~QG?)mytf(#y7wWt+b{9$nELq5K3}Y10;2 z($XDE*3O|D`J2mMeF(pjo#T%#s-thcmf}gZHCfLl2B1!6wrXu-NzKTtYtJ;6S#$kr z1q%UQr?A;-Irbnmo0+qyU&%8_XFSH0{qnAvTo<+9DP>7 zq8K^(j18wPKSWrw@=buXn8tgbM|sAv4nJ=m(2McBkt=0*9LdQwvxTWRYi0|f7rS#h z??0x0&e^7|RrydEd7K-0Yc|Y8h_66EEv91$mO{ZrR28V9j@tA%>SZ=Po_e`WPoR$3 zbeOu`rYBOzZF&-QhfPnW?zHJC)GKUyDs`7lpG2Lo>1otSo1RYHZPO=H_t^9d>XkNq z3iT?RK8?E9rcb3_ZPPMd7u)nq>NPffI`t(sJ&XEMn?8g3GMhe=`f{6|O|9DW9O^!s zuA@%bbUk(2rW>d=n{MQuGIg4J%RI?_*3J5Q?z~T?G`3{f(#f+R6_b3%MwiTHN>Av{G;yhnz^9vE(O$#8}P!~10TfD9jcV7T2S!GJN8J;SQG! zvmF?ILx$gy;ddSw?sUm8$ARJZWcULa{^)_>E|&~-4h(-H!=K6U7Y__~yJV<$VE8K; z{zitsdtkW7B}0P)!#~LIPcr<=1H-*885$iJ{!NBY$?zW!4EOO()ck9&+`)gu@?ZO* zy_nk@o;QrMVwD$|uM0zHdI-Cu^BF_aq*E7@`Gc1&pu zvm!^GJB0JXUt(SMoWBjh#_*TRs@YTv%jyDCEh?)E56U^dLPfI+S%h0;PvZ!bFTDdI zT)h)j;a1skV}-KwNM~bsu{ml8ZAU*2EaN8$;4=hq1XKAHc$T7|RjEK!sl*zk3Mr); z>lHsXDgv980IpSn*rJTV?Metcl(BprID-Ak1RPYtW{?{gs#$!2zaQV^XNM49TfT*D z=4XpT<&Off$?3=9k=3<6vX%nZEj41DYi{EQ52Hko;uC3cJq%o>xQG8Ipr$tuUj z!obSNU^;mslg?xxX3jK527#=^vPAuy#JqHU|D>$cAixNOKn*~W4an06 u^BEXewYD=bZUhQ2F|Y$kHlQ#APy+{$o;88{iZfILP9ZXn6TzykmdVHR`% diff --git a/target/classes/com/opentek/catapult/core/models/migrations/Column.class b/target/classes/com/opentek/catapult/core/models/migrations/Column.class index ee2a2eee40ec54deade472cb7b3107dd9e237ffe..a4041a43ebf51a8fa0bbf59aacee32db2881b9fc 100644 GIT binary patch literal 3393 zcmbW3TXz#x6vzM5Ofr);y^vC%Tr`T%G))Ot1)+cx5U?$mlwt}3({$Pnom`qsP?pQD z;aa}&qQ3B;YuUo`wtVuzkKyNVx%}@lX-KA1*V2ccv(KJ=&iU=LFX;aBST(>SsCuiFek%389o-ff`R#N+{Xh0pLF9P9?9ad0jnDWxNTxV=AsOX zCTtT+CYDXCh{7@PMCMfuy7#PVYe-H#v7TBv*D5dP@?Om;FQ4VNvQ^@@#G<`qHC%7b zavNO6Yxa^|v&%)wG1o3Hdn+2W>s&O-&YD2QX_OZ1+N`zUQj?sj6fJkosyVW5Ds^wgscSenRjib9m8xC#?A2V+ z@~kT9a>Yu`&XstcThEo8<(lO=m2y2dS#cYsGQH`p+g|H>Jv~1CCj|C&r1YDFf9RKeLWuTnE70{u9 z*OlY@W1yPA8fppD;c3|Y`nwN*so}Vbc8$*Z*q=)YPK+ebz*8AMrO(-v)ZWAhkI$ys z>rYg@*;K0rWgX9^{L-6{?Vs^+vZ-eIQ8SIxJdlB&bgeprGuV-2O3CWjp(q=k%@0iKS-dAm<_Q5s~IN%2kfD#yOh#0on^?mf;vv${vhSPWT4MVw@`tN7N?Se4Y?p zVx8Hy4()qNU69?~O52Yp+qs;u%eQKtAg2q8TznMAILcW+)5heS&AdccW^5giOm-c5 zW_+D&!}>Ze8H%pM$PC5SVP=MmjvEgn&b>+K7^JileROk>_YPw>%WMy8YnUW^70n(0 zo)%43J*YfFRz0bBl$GK{L`m|jx{~BUqe_w|jVVbyF_b6Ao1UED>^~_z2|mhx9(5q} zSx@i>cWX@I!I-2%H=n}0&CMM#i3hJ2{zK}7tuc|b5%TwNIs_#09o_ZA>nBG#6yyxv z-vT1R41#0{GQJIn_2nC4+K`w@ZTnq<^1wk$o{>vAZ8F`mLPYx0g+B1AXjjeqja)AStims)-q$?AgaF@ z`yG9m4Rnw3?`uROFUEdD&ouk3k>%fW+@NSuG@s)F#R$d7D~h+EtM)P5RxLf!HtTEkwkJd_foZd_jI! zqWMBhaPtL&lkp0D`GQHw6zLWEgTY#A3)Yz?mnQ!*@EUpGFUceqx<6r{@De+c$qfwh zya=a(kqzuj4*3ebrP$>wqAkU4UlD65_V@~81H;L^zHCw+_=4wcU|+DrR@)fe7UK-5 Hx^VL!oH;nd literal 2918 zcmbW3S#J|p6vzK#k7sN%NlYLt1&RwTacqOxT1Z2H5_S?chfs%Z6K9ePjF;GBBvkcl zRO%ZqT^@L7r6!Xn5x%YR^a?Kxq|MV+>)2OAf z4Odb~;i?SRWVkNF4H<6Aa7$dKbCopTB*^r>aO*qR5e|*$=j5wjh0oa zaX+VBs@cme)3qD*c4?~NbZT|pUSGD{SuZ#{b7QYV)1kfLFcNW1!Idp;dodJWUmBwA za!){qxYlbi=yQKF$_5=mYSL~$2*MuEjWO^ku5Vb>oENB+-M+h#jWn0Lie{~LOovhF zVZO8Q*s8h{vYFE8t%hKUNv(R3Q7}+;&FYgGv+0GIRj44jVzyWO+z{yo4Q|6PBL(Sl zqtmKdS8d7DHb1<_q}mJ|!lwq_z&-=}WjG+in=%|k*1%gbdlL%o8 z=2|nG?5#xwN5dq+D-zzaC%oKve{SmEmwSMEzh-r$_y__TVp2ksVp2uk%tG>J){-}~ zoV=M8#W@3om3Nrq+tj|}cRJ@I`Ik`gg*C+T#Wlq9N7ta{_o{11x z-OWSycsuO!y}IaHfX+-ug2ekl_CR5hUle}FV16CR0{^~7BL1TA8&WfDDXqxA=eS8xr>H;21!**ju~$fc zg%i}`)Z(6Yn3_sW^|TRc32F&X)75XG#^us+@7XxQ#{#&_N8t*)>?(iru3-W<`0pkj z;ue3GrqQHLIymdYcKdIYp67U#1DM4mD>BAT2A`aSKB)YKIUN@+%6%{51CDavDqj+X z^LR%41=}idxkI_43VgXDPlsBrXo6d==$y1yFv^uAC0(Rf80b&dy->2oyDtlW!GZ(7 zB$FKI{EWfMOAHNX*0G)Y#W-a~*D*Z2!#BjchMm4a?HWdWL!xWg>l3Z%R1%E X7u;_hd;42#F2v|`8K+1U!{vVf7fu6L diff --git a/target/classes/com/opentek/catapult/core/services/ModelService.class b/target/classes/com/opentek/catapult/core/services/ModelService.class index 6d9db823215efc407beb4fc72c8d7ff3794b4fc0..dfbc75ebe8e12e838a8440e3e1cd3b418e8c486e 100644 GIT binary patch delta 225 zcmeB>=#tnV!p`KUG1-b;WwH;u5D<$@j%VM`d5(dTL5P8Y@%UtQ4nxLindX>@@vk?oZA@O822+sG9I1W&ZS*n$6(E1&cMbH!I;iq z!=TK-&Jf3#$Y2X(aWEt?#xmFeS)2@MjFAlXKo%E6CSw?b1A`+2H$x6%FoP42#lyG_ zsKS}Sg@KpBg0Y>!6{wCC Hh+7Q+M;j`0 delta 224 zcmeB@=#bbT!p`KYG1-b;WwH;u5D<$@PGsN5d6t2LL5P8Y@z`Vy4nxMNo1-}D7)7=- z$XoGhOY-hyP+(#RZ((6v{x5s-Th7UxTN&IK_c2H^9+}+9rCndkV9j98z{U{4n8skk zpv=I|5XYFnU<+h%FeEX?FxUZEoD6A<5e)V~78gS%V<>|IgChesLk?pQgA Date: Sun, 31 Mar 2019 20:34:43 +0530 Subject: [PATCH 6/7] SchemaTest added --- .../com/opentek/catapult/sample/SchemaTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/opentek/catapult/sample/SchemaTest.java diff --git a/src/main/java/com/opentek/catapult/sample/SchemaTest.java b/src/main/java/com/opentek/catapult/sample/SchemaTest.java new file mode 100644 index 0000000..9a5b9c0 --- /dev/null +++ b/src/main/java/com/opentek/catapult/sample/SchemaTest.java @@ -0,0 +1,17 @@ +package com.opentek.catapult.sample; + +import com.opentek.catapult.core.exceptions.InvalidSchemaException; +import com.opentek.catapult.core.models.migrations.Schema; + +public class SchemaTest { + public static void main(String[] args) throws InvalidSchemaException { + Schema.create("Student",(bluePrint)->{ + try { + bluePrint.integer("id").primaryKey().unique().length(11).notnull().build(); + bluePrint.varchar("student_name").length(255).notnull().build(); + } catch (InvalidSchemaException e) { + e.printStackTrace(); + } + }); + } +} From 30df154cb062eb46e594102c4adc6a1ff8b521f1 Mon Sep 17 00:00:00 2001 From: Shailesh Jain Date: Sun, 23 Jun 2019 14:42:00 +0530 Subject: [PATCH 7/7] Removed comments. Signed-off-by: Shailesh Jain --- .../core/models/migrations/BluePrint.java | 55 ------------------- 1 file changed, 55 deletions(-) diff --git a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java index eeda5f0..9c6a4b0 100644 --- a/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java +++ b/src/main/java/com/opentek/catapult/core/models/migrations/BluePrint.java @@ -4,61 +4,6 @@ import java.util.ArrayList; -/** - * DATATYPE'S Available: - * Numeric: - * tinyint - * smallint - * mediumint - * int - * bigint - * - * decimal - * float - * double - * real - * - * bit - * boolean - * serial - * - * Datetime: - * date - * datetime - * timestamp - * time - * year - * - * Unicode String: - * nchar - * nvarchar - * ntext - * - * String: - * varchar - * char - * - * tinytext - * text - * mediumtext - * longtext - * - * binary - * varbinary - * - * tinyblob - * blob - * mediumblob - * longblob - * - * enum - * set - * - * Miscellaneous: - * cblob - * xml - * json - */ public class BluePrint { private final static String TINYINT = "TINYINT"; private final static String SMALLINT = "SMALLINT";