This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/master by this push:
new 3d6ad87 EMPIREDB-362 further API improvments: DBTable addIdentity and
addTimestamp
3d6ad87 is described below
commit 3d6ad87ee1f2c47699ff8ea80c311aff369c57e2
Author: Rainer Döbele <[email protected]>
AuthorDate: Fri Feb 18 14:20:58 2022 +0100
EMPIREDB-362 further API improvments: DBTable addIdentity and addTimestamp
---
.../empire/samples/db/advanced/SampleAdvApp.java | 40 +++++++++-----
.../empire/samples/db/advanced/db/CarSalesDB.java | 63 +++++++++++-----------
.../samples/db/advanced/db/DealerSalesView.java | 17 +++---
.../samples/db/advanced/records/BrandRecord.java | 8 +--
.../samples/db/advanced/records/DealerRecord.java | 8 +--
.../samples/db/advanced/records/ModelRecord.java | 16 +++---
.../org/apache/empire/samples/db/SampleApp.java | 6 +--
.../org/apache/empire/samples/db/SampleDB.java | 43 +++++++--------
.../java/org/apache/empire/db/DBCombinedCmd.java | 2 +-
.../main/java/org/apache/empire/db/DBCommand.java | 4 +-
.../java/org/apache/empire/db/DBCommandExpr.java | 5 +-
.../main/java/org/apache/empire/db/DBQuery.java | 22 +++-----
.../main/java/org/apache/empire/db/DBRecord.java | 20 ++++---
.../java/org/apache/empire/db/DBRecordBean.java | 18 ++++---
.../main/java/org/apache/empire/db/DBRowSet.java | 35 +++++++-----
.../main/java/org/apache/empire/db/DBTable.java | 63 +++++++++++++++++-----
.../main/java/org/apache/empire/db/DBUtils.java | 2 +-
.../empire/db/expr/compare/DBCompareColExpr.java | 6 +--
.../empire/db/expr/join/DBCompareJoinExpr.java | 2 +-
.../apache/empire/db/expr/order/DBOrderByExpr.java | 7 +--
.../java/org/apache/empire/db/generic/TRecord.java | 16 +++---
.../apache/empire/dbms/oracle/DBCommandOracle.java | 2 +-
22 files changed, 230 insertions(+), 175 deletions(-)
diff --git
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
index 176220c..74d4279 100644
---
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
+++
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
@@ -44,6 +44,7 @@ import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.exceptions.ConstraintViolationException;
import org.apache.empire.db.exceptions.StatementFailedException;
+import org.apache.empire.db.expr.compare.DBCompareExpr;
import org.apache.empire.dbms.DBMSHandler;
import org.apache.empire.samples.db.advanced.db.CarSalesDB;
import org.apache.empire.samples.db.advanced.db.CarSalesDB.DealershipType;
@@ -454,30 +455,41 @@ public class SampleAdvApp
private void queryViewDemo()
{
+ // query all
/*
- DBRecord rec = new DBRecord(context, carSales.DEALER_BRANDS);
- rec.read(DBRecord.key(1, "5YJ"));
- DealershipType dst1 =
rec.getEnum(carSales.DEALER_BRANDS.DEALERSHIP_TYPE);
- String dsn1 = rec.getString(carSales.DEALER_BRANDS.DEALERSHIP_TYPE);
- log.info("DealershipType {}", dsn1);
- */
-
- // shortcuts (for convenience)
- DealerSalesView DSV = carSales.DEALER_SALES_VIEW;
- // create command
DBCommand cmd = context.createCommand()
.select (DSV.getColumns())
.orderBy (DSV.SALE_YEAR, DSV.DEALER_COUNTRY);
+ List<DataListEntry> list = context.getUtils().queryDataList(cmd);
+ for (DataListEntry dle : list)
+ {
+ System.out.println(dle.toString());
+ }
+ */
+ // shortcuts (for convenience)
+ DealerSalesView DSV = carSales.DEALER_SALES_VIEW;
+
+ DBCommand cmd = context.createCommand();
+ // Detect if Brand sold is the Dealer's Brand
+ DBCompareExpr IS_DEALER_BRAND =
DSV.DEALERSHIP_TYPE.in(DealershipType.B, DealershipType.F);
+ // select
+ cmd.select(DSV.SALE_YEAR, DSV.DEALER_NAME, DSV.DEALER_COUNTRY);
+ cmd.select(DSV.SALE_COUNT.sum().as("TOTAL_SALES"));
+ cmd.select(carSales.caseWhen(IS_DEALER_BRAND, DSV.TURNOVER,
0).sum().as("TURNOVER_BRAND"));
+ cmd.select(DSV.TURNOVER.sum().as("TURNOVER_TOTAL"));
+ // group
+ cmd.groupBy(DSV.SALE_YEAR, DSV.DEALER_NAME, DSV.DEALER_COUNTRY);
+ // order
+ cmd.orderBy(DSV.SALE_YEAR, DSV.DEALER_NAME);
+
+ // query and print result
List<DataListEntry> list = context.getUtils().queryDataList(cmd);
for (DataListEntry dle : list)
{
- DealershipType dst = dle.getEnum(DSV.DEALERSHIP_TYPE);
- Options opt = DSV.DEALERSHIP_TYPE.getOptions();
- String dsn = dle.getString(DSV.DEALERSHIP_TYPE);
- log.info("DealershipType {}-->{}", dsn,
dle.format(DSV.DEALERSHIP_TYPE));
System.out.println(dle.toString());
}
+
}
/**
diff --git
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/CarSalesDB.java
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/CarSalesDB.java
index 4e76b9d..34f75e4 100644
---
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/CarSalesDB.java
+++
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/CarSalesDB.java
@@ -106,17 +106,17 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
public final DBTableColumn NAME;
public final DBTableColumn COUNTRY;
public final DBTableColumn UPDATE_TIMESTAMP;
-
+
public Brand(CarSalesDB db)
{
- super("BRANDS", db);
+ super("BRAND", db);
// ID
WMI = addColumn("WMI", DataType.VARCHAR,
3, true); // World Manufacturer Index (see Wikipedia)
NAME = addColumn("NAME", DataType.VARCHAR,
80, true);
COUNTRY = addColumn("COUNTRY", DataType.VARCHAR,
40, false);
- UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP",
DataType.TIMESTAMP, 0, true);
+ UPDATE_TIMESTAMP= addTimestamp("UPDATE_TIMESTAMP");
- // Primary Key (automatically set due to AUTOINC column)
+ // Set Primary Key
setPrimaryKey(WMI);
}
}
@@ -138,21 +138,21 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
public Model(CarSalesDB db)
{
- super("MODELS", db);
+ super("MODEL", db);
// ID
- ID = addColumn("ID", DataType.AUTOINC,
0, true, "MODEL_ID_SEQUENCE"); // Optional Sequence name for some DBMS
(e.g. Oracle)
- NAME = addColumn("NAME", DataType.VARCHAR,
20, true);
- CONFIG_NAME = addColumn("CONFIGURATION", DataType.VARCHAR,
40, true);
- WMI = addForgeinKey(db.BRAND, "WMI", true);
- TRIM = addColumn("TRIM", DataType.VARCHAR,
20, true);
- ENGINE_TYPE = addColumn("ENGINE_TYPE", DataType.CHAR,
1, true, EngineType.class);
- ENGINE_POWER = addColumn("ENGINE_POWER", DataType.DECIMAL,
4.0, true);
- BASE_PRICE = addColumn("BASE_PRICE", DataType.DECIMAL,
8.2, false);
- UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP",
DataType.TIMESTAMP, 0, true);
+ ID = addIdentity ("ID",
"MODEL_ID_SEQUENCE"); // Optional Sequence name for some DBMS (e.g. Oracle)
+ NAME = addColumn ("NAME",
DataType.VARCHAR, 20, true);
+ CONFIG_NAME = addColumn ("CONFIGURATION",
DataType.VARCHAR, 40, true);
+ WMI = addForeignKey("WMI", db.BRAND,
true);
+ TRIM = addColumn ("TRIM",
DataType.VARCHAR, 20, true);
+ ENGINE_TYPE = addColumn ("ENGINE_TYPE", DataType.CHAR,
1, true, EngineType.class);
+ ENGINE_POWER = addColumn ("ENGINE_POWER",
DataType.DECIMAL, 4.0, true);
+ BASE_PRICE = addColumn ("BASE_PRICE",
DataType.DECIMAL, 8.2, false);
+ UPDATE_TIMESTAMP= addTimestamp ("UPDATE_TIMESTAMP");
- // Primary Key (automatically set due to AUTOINC column, but we'll
set it anyway)
- setPrimaryKey(ID);
+ // Primary Key (automatically set due to addIdentity()) otherwise
use
+ // setPrimaryKey(...);
}
}
@@ -171,19 +171,19 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
public Dealer(CarSalesDB db)
{
- super("DEALERS", db);
+ super("DEALER", db);
// ID
- ID = addColumn("ID", DataType.AUTOINC,
0, true, "DEALER_ID_SEQUENCE"); // Optional Sequence name for some DBMS
(e.g. Oracle)
- COMPANY_NAME = addColumn("COMPANY_NAME", DataType.VARCHAR,
40, true);
- STREET = addColumn("ADDRESS", DataType.VARCHAR,
40, false);
- CITY = addColumn("CITY", DataType.VARCHAR,
20, true);
- COUNTRY = addColumn("COUNTRY", DataType.VARCHAR,
40, true);
- YEAR_FOUNDED = addColumn("YEAR_FOUNDED", DataType.DECIMAL,
4.0, false);
- UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP",
DataType.TIMESTAMP, 0, true);
+ ID = addIdentity ("ID",
"DEALER_ID_SEQUENCE"); // Optional Sequence name for some DBMS (e.g. Oracle)
+ COMPANY_NAME = addColumn ("COMPANY_NAME",
DataType.VARCHAR, 40, true);
+ STREET = addColumn ("ADDRESS",
DataType.VARCHAR, 40, false);
+ CITY = addColumn ("CITY",
DataType.VARCHAR, 20, true);
+ COUNTRY = addColumn ("COUNTRY",
DataType.VARCHAR, 40, true);
+ YEAR_FOUNDED = addColumn ("YEAR_FOUNDED",
DataType.DECIMAL, 4.0, false);
+ UPDATE_TIMESTAMP= addTimestamp("UPDATE_TIMESTAMP");
- // Primary Key (automatically set due to AUTOINC column, but we'll
set it anyway)
- setPrimaryKey(ID);
+ // Primary Key (automatically set due to addIdentity()) otherwise
use
+ // setPrimaryKey(...);
}
}
@@ -202,8 +202,8 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
super("DEALER_BRANDS", db);
// Key columns
- DEALER_ID = addForgeinKey(db.DEALER, "DEALER_ID", true);
- WMI = addForgeinKey(db.BRAND, "WMI", true);
+ DEALER_ID = addForeignKey("DEALER_ID", db.DEALER, true);
+ WMI = addForeignKey("WMI", db.BRAND, true);
// Data columns
DEALERSHIP_TYPE = addColumn("DEALERSHIP_TYPE", DataType.CHAR,
1, true, DealershipType.class);
YEAR_BEGIN = addColumn("YEAR_BEGIN", DataType.DECIMAL,
4.0, false);
@@ -229,8 +229,8 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
super("SALES", db);
// ID
- MODEL_ID = addForgeinKey(db.MODEL, "MODEL_ID", true);
- DEALER_ID = addForgeinKey(db.DEALER, "DEALER_ID", true);
+ MODEL_ID = addForeignKey("MODEL_ID", db.MODEL, true);
+ DEALER_ID = addForeignKey("DEALER_ID", db.DEALER, true);
YEAR = addColumn("YEAR", DataType.DECIMAL,
4.0, true);
MONTH = addColumn("MONTH", DataType.DECIMAL,
2.0, true);
CAR_COLOR = addColumn("CAR_COLOR", DataType.VARCHAR,
20, false);
@@ -260,10 +260,11 @@ public class CarSalesDB extends TDatabase<CarSalesDB>
*/
public CarSalesDB()
{
- // Define other Foreign-Key Relations
+ // Define additional Foreign-Key Relations here
// e.g. Multicolum etc.
// addRelation( SALES.MODEL_ID.referenceOn( MODEL.ID )
// , SALES.MODEL_ID.referenceOn( target ));
+ log.info("CarSalesDB has been created with {} Tables, {} Views and {}
Relations", getTables().size(), getViews().size(), getRelations().size());
}
/**
diff --git
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/DealerSalesView.java
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/DealerSalesView.java
index 83b4455..7efc869 100644
---
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/DealerSalesView.java
+++
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/db/DealerSalesView.java
@@ -11,20 +11,22 @@ public class DealerSalesView extends TView<CarSalesDB>
public final DBViewColumn DEALER_NAME;
public final DBViewColumn DEALER_COUNTRY;
public final DBViewColumn BRAND_SOLD;
+ public final DBViewColumn DEALERSHIP_TYPE;
public final DBViewColumn SALE_YEAR;
public final DBViewColumn SALE_COUNT;
- public final DBViewColumn DEALERSHIP_TYPE;
+ public final DBViewColumn TURNOVER;
public DealerSalesView(CarSalesDB db)
{
super("DEALER_SALES_VIEW", db);
// add columns
- DEALER_NAME = addColumn("DEALER_NAME", db.DEALER.COMPANY_NAME);
- DEALER_COUNTRY = addColumn("DEALER_COUNTRY", db.DEALER.COUNTRY);
- BRAND_SOLD = addColumn("BRAND_SOLD", db.BRAND.NAME);
- DEALERSHIP_TYPE= addColumn("DEALERSHIP_TYPE",
db.DEALER_BRANDS.DEALERSHIP_TYPE);
- SALE_YEAR = addColumn("SALE_YEAR", db.SALES.YEAR);
- SALE_COUNT = addColumn("SALE_COUNT", DataType.INTEGER);
+ DEALER_NAME = addColumn("DEALER_NAME", db.DEALER.COMPANY_NAME);
+ DEALER_COUNTRY = addColumn("DEALER_COUNTRY", db.DEALER.COUNTRY);
+ BRAND_SOLD = addColumn("BRAND_SOLD", db.BRAND.NAME);
+ DEALERSHIP_TYPE = addColumn("DEALERSHIP_TYPE",
db.DEALER_BRANDS.DEALERSHIP_TYPE);
+ SALE_YEAR = addColumn("SALE_YEAR", db.SALES.YEAR);
+ SALE_COUNT = addColumn("SALE_COUNT", DataType.INTEGER);
+ TURNOVER = addColumn("TURNOVER", DataType.DECIMAL);
}
@Override
@@ -35,6 +37,7 @@ public class DealerSalesView extends TView<CarSalesDB>
cmd.select(DB.DEALER.COMPANY_NAME, DB.DEALER.COUNTRY);
cmd.select(DB.BRAND.NAME, DB.DEALER_BRANDS.DEALERSHIP_TYPE);
cmd.select(DB.SALES.YEAR, DB.SALES.count());
+ cmd.select(DB.SALES.PRICE.sum().as(TURNOVER));
// joins
cmd.join (DB.DEALER.ID, DB.SALES.DEALER_ID);
cmd.join (DB.SALES.MODEL_ID, DB.MODEL.ID);
diff --git
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/BrandRecord.java
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/BrandRecord.java
index 6267509..ba546a3 100644
---
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/BrandRecord.java
+++
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/BrandRecord.java
@@ -33,11 +33,11 @@ public class BrandRecord extends TRecord<CarSalesDB.Brand>
public BrandRecord insert(String wmi, String name, String country)
{
- // RS = RowSet
+ // T = RowSet (Table/View)
create();
- set(RS.WMI, wmi);
- set(RS.NAME, name);
- set(RS.COUNTRY, country);
+ set(T.WMI, wmi);
+ set(T.NAME, name);
+ set(T.COUNTRY, country);
update();
return this;
}
diff --git
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/DealerRecord.java
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/DealerRecord.java
index 7ca4385..b138204 100644
---
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/DealerRecord.java
+++
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/DealerRecord.java
@@ -15,11 +15,11 @@ public class DealerRecord extends TRecord<CarSalesDB.Dealer>
public DealerRecord insert(String companyName, String city, String country)
{
- // RS = RowSet
+ // T = RowSet (Table/View)
create();
- set(RS.COMPANY_NAME, companyName);
- set(RS.CITY, city);
- set(RS.COUNTRY, country);
+ set(T.COMPANY_NAME, companyName);
+ set(T.CITY, city);
+ set(T.COUNTRY, country);
update();
return this;
}
diff --git
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/ModelRecord.java
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/ModelRecord.java
index 78f8e1b..239fc00 100644
---
a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/ModelRecord.java
+++
b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/records/ModelRecord.java
@@ -16,15 +16,15 @@ public class ModelRecord extends TRecord<CarSalesDB.Model>
public void insert(BrandRecord brand, String modelName, String configName,
String trim, EngineType engineType, int enginePower, double basePrice)
{
- // RS = RowSet
+ // T = RowSet (Table/View)
create();
- set(RS.WMI , brand);
- set(RS.NAME , modelName);
- set(RS.CONFIG_NAME , configName);
- set(RS.TRIM , trim);
- set(RS.ENGINE_TYPE , engineType);
- set(RS.ENGINE_POWER , enginePower);
- set(RS.BASE_PRICE , basePrice);
+ set(T.WMI , brand);
+ set(T.NAME , modelName);
+ set(T.CONFIG_NAME , configName);
+ set(T.TRIM , trim);
+ set(T.ENGINE_TYPE , engineType);
+ set(T.ENGINE_POWER , enginePower);
+ set(T.BASE_PRICE , basePrice);
update();
}
}
diff --git
a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
index cfe6560..b15c046 100644
---
a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
+++
b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
@@ -290,7 +290,7 @@ public class SampleApp
.set(DEP.BUSINESS_UNIT, businessUnit)
.update();
// Return Department ID
- return rec.getId();
+ return rec.getIdentity();
}
/**
@@ -314,7 +314,7 @@ public class SampleApp
if (salary>0)
insertPayments(rec);
// Return Employee ID
- return rec.getId();
+ return rec.getIdentity();
}
/**
@@ -340,7 +340,7 @@ public class SampleApp
BigDecimal variation = new BigDecimal((Math.random()*200) - 100.0);
variation = variation.setScale(2, RoundingMode.HALF_UP);
// insert
- rec.create(DBRecord.key(employee.getId(), month.getYear(),
month.getMonth()));
+ rec.create(DBRecord.key(employee.getIdentity(), month.getYear(),
month.getMonth()));
rec.set(PAY.AMOUNT, monthlySalary.add(variation));
rec.update();
}
diff --git
a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
index 2d480d3..8e3b948 100644
---
a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
+++
b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleDB.java
@@ -92,11 +92,11 @@ public class SampleDB extends DBDatabase
{
super("DEPARTMENTS", db);
// ID
- ID = addColumn("ID", DataType.AUTOINC,
0, true, "DEP_ID_SEQUENCE"); // Optional Sequence for some DBMS (e.g.
Oracle)
- NAME = addColumn("NAME", DataType.VARCHAR,
80, true);
- HEAD = addColumn("HEAD", DataType.VARCHAR,
80, false);
- BUSINESS_UNIT = addColumn("BUSINESS_UNIT", DataType.VARCHAR,
4, true, "ITTK");
- UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP",
DataType.TIMESTAMP, 0, true);
+ ID = addIdentity ("ID",
"DEP_ID_SEQUENCE"); // Optional Sequence for some DBMS (e.g. Oracle)
+ NAME = addColumn ("NAME",
DataType.VARCHAR, 80, true);
+ HEAD = addColumn ("HEAD",
DataType.VARCHAR, 80, false);
+ BUSINESS_UNIT = addColumn ("BUSINESS_UNIT",
DataType.VARCHAR, 4, true, "ITTK");
+ UPDATE_TIMESTAMP= addTimestamp("UPDATE_TIMESTAMP");
// Primary Key (automatically set due to AUTOINC column)
// setPrimaryKey(DEPARTMENT_ID);
@@ -131,18 +131,18 @@ public class SampleDB extends DBDatabase
super("EMPLOYEES", db);
// ID
- ID = addColumn("ID", DataType.AUTOINC,
0, true, "EMPLOYEE_ID_SEQUENCE"); // Optional Sequence name for some DBMS
(e.g. Oracle)
- SALUTATION = addColumn("SALUTATION", DataType.VARCHAR,
5, false);
- FIRST_NAME = addColumn("FIRST_NAME", DataType.VARCHAR,
40, true);
- LAST_NAME = addColumn("LAST_NAME", DataType.VARCHAR,
40, true);
- DATE_OF_BIRTH = addColumn("DATE_OF_BIRTH", DataType.DATE,
0, false);
- DEPARTMENT_ID = addColumn("DEPARTMENT_ID", DataType.INTEGER,
0, true);
- GENDER = addColumn("GENDER", DataType.VARCHAR,
1, true, Gender.class);
- PHONE_NUMBER = addColumn("PHONE_NUMBER", DataType.VARCHAR,
40, false);
- EMAIL = addColumn("EMAIL", DataType.VARCHAR,
80, false);
- SALARY = addColumn("SALARY", DataType.DECIMAL,
10.2, false);
- RETIRED = addColumn("RETIRED", DataType.BOOL,
0, true, false);
- UPDATE_TIMESTAMP= addColumn("UPDATE_TIMESTAMP",
DataType.TIMESTAMP, 0, true);
+ ID = addIdentity ("ID",
"EMPLOYEE_ID_SEQUENCE"); // Optional Sequence name for some DBMS (e.g. Oracle)
+ SALUTATION = addColumn ("SALUTATION",
DataType.VARCHAR, 5, false);
+ FIRST_NAME = addColumn ("FIRST_NAME",
DataType.VARCHAR, 40, true);
+ LAST_NAME = addColumn ("LAST_NAME",
DataType.VARCHAR, 40, true);
+ DATE_OF_BIRTH = addColumn ("DATE_OF_BIRTH", DataType.DATE,
0, false);
+ DEPARTMENT_ID = addForeignKey("DEPARTMENT_ID",
db.DEPARTMENTS, true);
+ GENDER = addColumn ("GENDER",
DataType.VARCHAR, 1, true, Gender.class);
+ PHONE_NUMBER = addColumn ("PHONE_NUMBER",
DataType.VARCHAR, 40, false);
+ EMAIL = addColumn ("EMAIL",
DataType.VARCHAR, 80, false);
+ SALARY = addColumn ("SALARY",
DataType.DECIMAL, 10.2, false);
+ RETIRED = addColumn ("RETIRED", DataType.BOOL,
0, true, false);
+ UPDATE_TIMESTAMP= addTimestamp ("UPDATE_TIMESTAMP");
// Primary Key (automatically set due to AUTOINC column)
// setPrimaryKey(EMPLOYEE_ID);
@@ -169,7 +169,7 @@ public class SampleDB extends DBDatabase
super("PAYMENTS", db);
// ID
- EMPLOYEE_ID = addColumn("EMPLOYEE_ID", DataType.INTEGER,
0, true);
+ EMPLOYEE_ID = addForeignKey("EMPLOYEE_ID", db.EMPLOYEES,
true);
YEAR = addColumn("YEAR", DataType.DECIMAL,
4.0, true);
MONTH = addColumn("MONTH", DataType.DECIMAL,
2.0, true);
AMOUNT = addColumn("AMOUNT", DataType.DECIMAL,
8.2, true);
@@ -195,9 +195,10 @@ public class SampleDB extends DBDatabase
*/
public SampleDB()
{
- // Define Foreign-Key Relations
- addRelation( EMPLOYEES.DEPARTMENT_ID.referenceOn( DEPARTMENTS.ID ));
- addRelation( PAYMENTS.EMPLOYEE_ID .referenceOn( EMPLOYEES.ID ));
+ // Define additional Foreign-Key Relations here
+ // which have not already been defined by addForeignKey()
+ // addRelation( {Source Column}.referenceOn( {Target Column} ));
+ log.info("SampleDB has been created with {} Tables and {} Relations",
getTables().size(), getRelations().size());
}
@Override
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java
b/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java
index 10159b3..8825bc4 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCombinedCmd.java
@@ -200,7 +200,7 @@ public class DBCombinedCmd extends DBCommandExpr
// Add order by expression
for (DBOrderByExpr obe : exprs)
{
- DBColumnExpr c = getCmdColumn(obe.getColumnExpr());
+ DBColumnExpr c = getCmdColumn(obe.getColumn());
orderBy.add(new DBOrderByExpr(c, obe.isDescending()));
}
return this;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
index ba39c30..d1a4549 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommand.java
@@ -1281,7 +1281,7 @@ public abstract class DBCommand extends DBCommandExpr
if (!(cmp instanceof DBCompareColExpr))
continue;
// Compare columns
- DBColumnExpr c = ((DBCompareColExpr)cmp).getColumnExpr();
+ DBColumnExpr c = ((DBCompareColExpr)cmp).getColumn();
DBColumn udc = c.getUpdateColumn();
if (c.equals(col) || (udc!=null &&
udc.equals(col.getUpdateColumn())))
{ // Check if we replace a DBCommandParam
@@ -1416,7 +1416,7 @@ public abstract class DBCommand extends DBCommandExpr
compexpr = new ArrayList<DBCompareColExpr>(where.size());
for (DBCompareExpr expr : where)
{ if (expr instanceof DBCompareColExpr)
- { DBColumn column =
((DBCompareColExpr)expr).getColumnExpr().getUpdateColumn();
+ { DBColumn column =
((DBCompareColExpr)expr).getColumn().getUpdateColumn();
if (column!=null && hasSetExprOn(column)==false)
compexpr.add((DBCompareColExpr)expr);
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
index 1246299..096533d 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBCommandExpr.java
@@ -25,6 +25,7 @@ import java.util.Set;
import org.apache.empire.commons.Options;
import org.apache.empire.data.DataType;
+import org.apache.empire.db.expr.compare.DBCompareExpr;
import org.apache.empire.db.expr.order.DBOrderByExpr;
import org.apache.empire.dbms.DBMSHandler;
import org.apache.empire.exceptions.InvalidArgumentException;
@@ -127,7 +128,7 @@ public abstract class DBCommandExpr extends DBExpr
/** throws ERR_NOTSUPPORTED */
@Override
- public void readRecord(DBRecordBase record, Object[] key)
+ public void readRecord(DBRecordBase record, DBCompareExpr
whereConstraints)
{
throw new NotSupportedException(this, "getRecord");
}
@@ -435,7 +436,7 @@ public abstract class DBCommandExpr extends DBExpr
{ // find existing
for (DBOrderByExpr ob : orderBy)
{ // Compare expression
- if (ob.getColumnExpr().equals(expr.getColumnExpr()))
+ if (ob.getColumn().equals(expr.getColumn()))
{ // already there, replace
ob.setDescending(expr.isDescending());
expr = null;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index 0c845b1..e5a91a9 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -27,7 +27,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.empire.commons.ObjectUtils;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.data.ColumnExpr;
-import org.apache.empire.db.exceptions.InvalidKeyException;
import org.apache.empire.db.exceptions.NoPrimaryKeyException;
import org.apache.empire.db.exceptions.RecordUpdateAmbiguousException;
import org.apache.empire.db.exceptions.RecordUpdateFailedException;
@@ -390,20 +389,13 @@ public class DBQuery extends DBRowSet
* @param conn a valid connection to the database.
*/
@Override
- public void readRecord(DBRecordBase record, Object[] key)
+ public void readRecord(DBRecordBase record, DBCompareExpr whereConstraints)
{
- if (record == null)
- throw new InvalidArgumentException("conn|rec", null);
- DBColumn[] keyColumns = getKeyColumns();
- if (key == null || keyColumns.length != key.length)
- throw new InvalidKeyException(this, key);
+ if (record==null || whereConstraints==null)
+ throw new InvalidArgumentException("record|key", null);
// Select
DBCommand cmd = getCommandFromExpression();
- for (int i = 0; i < keyColumns.length; i++)
- { // Set key column constraint
- Object value = key[i];
- cmd.where(keyColumns[i].is(value));
- }
+ cmd.where(whereConstraints);
// Read Record
readRecord(record, cmd);
}
@@ -501,15 +493,15 @@ public class DBQuery extends DBRowSet
if (cmp instanceof DBCompareColExpr)
{ // Check whether constraint belongs to update table
DBCompareColExpr cmpExpr = (DBCompareColExpr) cmp;
- DBColumn col = cmpExpr.getColumnExpr().getUpdateColumn();
+ DBColumn col = cmpExpr.getColumn().getUpdateColumn();
if (col!=null && col.getRowSet() == table)
{ // add the constraint
if (cmpExpr.getValue() instanceof DBCmdParam)
{ // Create a new command param
- DBColumnExpr colExpr = cmpExpr.getColumnExpr();
+ DBColumnExpr colExpr = cmpExpr.getColumn();
DBCmdParam param
=(DBCmdParam)cmpExpr.getValue();
DBCmdParam value = upd.addParam(colExpr,
param.getValue());
- cmp = new DBCompareColExpr(colExpr,
cmpExpr.getCmpop(), value);
+ cmp = new DBCompareColExpr(colExpr,
cmpExpr.getCmpOperator(), value);
}
upd.where(cmp);
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index e047b20..12edb5f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -224,13 +224,13 @@ public class DBRecord extends DBRecordBase
}
/**
- * Returns the record id for tables which have a single numeric primary key
+ * Returns the record identity for tables which have a single numeric
primary key like AUTOINC
* This method is provided for convenience in addition to the the getKey()
method
* @return the record id or 0 if the key is null
* @throws NoPrimaryKeyException if the table has no primary key
* @throws NotSupportedException if the primary key is not a single column
of if the column is not numeric
*/
- public long getId()
+ public long getIdentity()
{
// Check Columns
Column[] keyColumns = getKeyColumns();
@@ -238,7 +238,7 @@ public class DBRecord extends DBRecordBase
throw new NoPrimaryKeyException(getRowSet());
// Check Columns
if (keyColumns.length!=1 || !keyColumns[0].getDataType().isNumeric())
- throw new NotSupportedException(this, "getId");
+ throw new NotSupportedException(this, "getIdentity");
// the numeric id
return getLong(keyColumns[0]);
}
@@ -268,17 +268,19 @@ public class DBRecord extends DBRecordBase
*/
public DBRecord read(Object[] key)
{ // read
- getRowSet().readRecord(this, key);
+ DBRowSet rs = getRowSet();
+ DBCompareExpr keyConstraints = rs.getKeyConstraints(key);
+ rs.readRecord(this, keyConstraints);
return this;
}
/**
* Reads a record from the database
- * @param id the record id value
+ * @param identity the record id value
*/
- public final DBRecord read(long id)
+ public final DBRecord read(long identity)
{
- return read(new Object[] {id});
+ return read(new Object[] { identity });
}
/**
@@ -303,7 +305,9 @@ public class DBRecord extends DBRecordBase
*/
public DBRecord read(Object[] key, PartialMode mode, DBColumn... columns)
{
- getRowSet().readRecord(this, key, mode, columns);
+ DBRowSet rs = getRowSet();
+ DBCompareExpr keyConstraints = rs.getKeyConstraints(key);
+ rs.readRecord(this, keyConstraints, mode, columns);
return this;
}
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecordBean.java
b/empire-db/src/main/java/org/apache/empire/db/DBRecordBean.java
index 2d0b405..0aa366f 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecordBean.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecordBean.java
@@ -130,13 +130,13 @@ public class DBRecordBean extends DBRecordBase
}
/**
- * Returns the record id for tables which have a single numeric primary key
+ * Returns the record identity for tables which have a single numeric
primary key like AUTOINC
* This method is provided for convenience in addition to the the getKey()
method
* @return the record id or 0 if the key is null
* @throws NoPrimaryKeyException if the table has no primary key
* @throws NotSupportedException if the primary key is not a single column
of if the column is not numeric
*/
- public long getId()
+ public long getIdentity()
{
// Check Columns
Column[] keyColumns = getKeyColumns();
@@ -144,7 +144,7 @@ public class DBRecordBean extends DBRecordBase
throw new NoPrimaryKeyException(getRowSet());
// Check Columns
if (keyColumns.length!=1 || !keyColumns[0].getDataType().isNumeric())
- throw new NotSupportedException(this, "getId");
+ throw new NotSupportedException(this, "getIdentity");
// the numeric id
return getLong(keyColumns[0]);
}
@@ -194,7 +194,8 @@ public class DBRecordBean extends DBRecordBase
{ // read
try {
this.tempContext = context;
- rowset.readRecord(this, key);
+ DBCompareExpr keyConstraints = rowset.getKeyConstraints(key);
+ rowset.readRecord(this, keyConstraints);
return this;
} finally {
this.tempContext = null;
@@ -203,11 +204,11 @@ public class DBRecordBean extends DBRecordBase
/**
* Reads a record from the database
- * @param id the record id value
+ * @param identity the record id value
*/
- public final DBRecordBean read(DBContext context, DBRowSet rowset, long id)
+ public final DBRecordBean read(DBContext context, DBRowSet rowset, long
identity)
{
- return read(context, rowset, new Object[] {id});
+ return read(context, rowset, new Object[] { identity });
}
/**
@@ -239,7 +240,8 @@ public class DBRecordBean extends DBRecordBase
{ // read
try {
this.tempContext = context;
- rowset.readRecord(this, key, mode, columns);
+ DBCompareExpr keyConstraints = rowset.getKeyConstraints(key);
+ rowset.readRecord(this, keyConstraints, mode, columns);
return this;
} finally {
this.tempContext = null;
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index 2eb4a8c..33d9b86 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -34,10 +34,11 @@ import org.apache.empire.data.Column;
import org.apache.empire.data.ColumnExpr;
import org.apache.empire.data.DataType;
import org.apache.empire.data.EntityType;
+import org.apache.empire.data.Record;
import org.apache.empire.db.DBRelation.DBCascadeAction;
import org.apache.empire.db.DBRelation.DBReference;
-import org.apache.empire.db.exceptions.FieldReadOnlyException;
import org.apache.empire.db.exceptions.FieldNotNullException;
+import org.apache.empire.db.exceptions.FieldReadOnlyException;
import org.apache.empire.db.exceptions.InvalidKeyException;
import org.apache.empire.db.exceptions.NoPrimaryKeyException;
import org.apache.empire.db.exceptions.QueryNoResultException;
@@ -58,6 +59,7 @@ import org.apache.empire.exceptions.ItemNotFoundException;
import org.apache.empire.exceptions.NotSupportedException;
import org.apache.empire.exceptions.ObjectNotValidException;
import org.apache.empire.exceptions.UnexpectedReturnValueException;
+import org.apache.empire.exceptions.UnspecifiedErrorException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -511,6 +513,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
{
this.comment = comment;
}
+
/**
* @return Returns the timestampColumn.
*/
@@ -527,11 +530,13 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
if (timestampColumn!=null && timestampColumn.getRowSet()!=this)
throw new InvalidArgumentException("timestampColumn",
timestampColumn);
if (timestampColumn!=null && this.timestampColumn!=null &&
this.timestampColumn!=timestampColumn)
- log.warn("Timestamp column has already been set for rowset {}.
Replacing with {}", getName(), timestampColumn.getName());
+ throw new UnspecifiedErrorException("A Timestamp column has
already been set for rowset "+getName());
if (timestampColumn instanceof DBTableColumn)
((DBTableColumn) timestampColumn).setReadOnly(true);
// set now
this.timestampColumn = timestampColumn;
+ // log
+ log.debug("Timestamp column {} has been set for table {}",
timestampColumn.getName(), getName());
}
/**
@@ -747,23 +752,25 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
* @param cmd the command to which to add the constraints
* @param key the record key
*/
- protected void setKeyConstraints(DBCommand cmd, Object[] key)
+ protected DBCompareExpr getKeyConstraints(Object[] key)
{
// Check Primary key
DBColumn[] keyColumns =(DBColumn[])getKeyColumns();
- if (keyColumns == null )
+ if (keyColumns==null || keyColumns.length==0)
throw new NoPrimaryKeyException(this); // Invalid Argument
// Check Columns
if (key == null || key.length != keyColumns.length)
throw new InvalidKeyException(this, key); // Invalid Argument
// Add the key constraints
- for (int i = 0; i < key.length; i++)
+ DBCompareExpr compareExpr = keyColumns[0].is(key[0]);
+ for (int i = 1; i < key.length; i++)
{ // prepare key value
DBColumn column = keyColumns[i];
Object value = key[i];
// set key column constraint
- cmd.where(column.is(value));
- }
+ compareExpr = compareExpr.and(column.is(value));
+ }
+ return compareExpr;
}
/**
@@ -774,7 +781,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
* @param cmd the SQL-Command used to query the record
* @param rowSetData optional rowset specific data to be held on the record
*/
- protected <R extends DBRecordBase> void readRecord(R record, DBCommand cmd)
+ protected void readRecord(DBRecordBase record, DBCommand cmd)
{
// check param
checkParamRecord(record, false);
@@ -816,7 +823,6 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
* <P>
* @param record the DBRecord object which will hold the record data
* @param key the primary key values
- */
public <R extends DBRecordBase> void readRecord(R record, Object[] key)
{
// Check Arguments
@@ -829,6 +835,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
// Read Record
readRecord(record, cmd);
}
+ */
/**
* Reads a record from the database
@@ -858,10 +865,10 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
* @param mode flag whether to include only the given columns or whether
to add all but the given columns
* @param columns the columns to include or exclude (depending on mode)
*/
- public void readRecord(DBRecordBase record, Object[] key, PartialMode
mode, DBColumn... columns)
+ public void readRecord(DBRecordBase record, DBCompareExpr
whereConstraints, PartialMode mode, DBColumn... columns)
{
// Check Arguments
- checkParamNull("key", key);
+ checkParamNull("whereConstraints", whereConstraints);
// create command
DBCommand cmd = createRecordCommand(record.getContext());
for (DBColumn column : this.columns)
@@ -886,7 +893,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
}
}
// Set key constraints
- setKeyConstraints(cmd, key);
+ cmd.where(whereConstraints);
// Read Record
readRecord(record, cmd);
}
@@ -907,7 +914,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
DBCommand cmd = createRecordCommand(context);
cmd.select(count());
// Set key constraints
- setKeyConstraints(cmd, key);
+ cmd.where(getKeyConstraints(key));
// check exits
return (context.getUtils().querySingleInt(cmd, 0)==1);
}
@@ -921,7 +928,7 @@ public abstract class DBRowSet extends DBExpr implements
EntityType
*/
public final boolean recordExists(Object id, DBContext context)
{
- return recordExists(new Object[] { id }, context);
+ return recordExists(Record.key(id), context);
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTable.java
b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
index 593a1f9..08242d6 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTable.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
@@ -37,7 +37,9 @@ import
org.apache.empire.db.exceptions.RecordDeleteFailedException;
import org.apache.empire.db.exceptions.RecordUpdateFailedException;
import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.ItemExistsException;
+import org.apache.empire.exceptions.ObjectNotValidException;
import org.apache.empire.exceptions.UnexpectedReturnValueException;
+import org.apache.empire.exceptions.UnspecifiedErrorException;
/**
@@ -272,19 +274,22 @@ public class DBTable extends DBRowSet implements Cloneable
* @return the new column object
*/
protected DBTableColumn crateAndAppendColumn(String columnName, DataType
type, double size, boolean required, Object defValue)
- {
+ {
+ // Check exists
+ if (getColumn(columnName)!=null)
+ throw new ItemExistsException(columnName);
// Make sure (DataType.INTEGER & DataMode.AutoGenerated) =
DataType.AUTOINC
boolean autoGenerated = (type==DataType.AUTOINC ||
type==DataType.UNIQUEID);
DBTableColumn column = new DBTableColumn(this, type, columnName, size,
required, autoGenerated, defValue);
- addColumn(column);
// auto-set primary key
if (column.getDataType()==DataType.AUTOINC)
{ // Automatically set primary key
if (this.primaryKey==null)
this.setPrimaryKey(column);
else
- log.warn("Table {} already has a Primary-Key! DataType of
column {} should be INTEGER.", getName(), column.getName());
+ throw new UnspecifiedErrorException("Table "+getName()+"
already has a Primary-Key! No column of type AUTOINC can be added.");
}
+ /*
// auto-set timestamp column
if (column.getDataType()==DataType.TIMESTAMP)
{ // Automatically set timestamp column
@@ -293,6 +298,8 @@ public class DBTable extends DBRowSet implements Cloneable
else
log.warn("Table {} already has a Timestamp column. DataType of
column {} should be DATETIME.", getName(), column.getName());
}
+ */
+ addColumn(column);
return column;
}
@@ -413,16 +420,32 @@ public class DBTable extends DBRowSet implements Cloneable
}
/**
+ * Adds an Identity column to the table which also serves as the PrimaryKey
+ * An Identity Column is always an auto-generated Integer(Long) value
+ * @param name the name of the identity column
+ * @param seqName (optional) name of the sequence if supported by DBMS
+ * @return the Identity column
+ */
+ public DBTableColumn addIdentity(String name, String seqName)
+ {
+ return addColumn("ID", DataType.AUTOINC, 0, true, seqName);
+ }
+
+ /**
* Adds a new ForgeinKey table column the column list
* The foreign table must have a single column foreign key
- * @param target the table on which to reference
* @param name the name of the new column
+ * @param target the table on which to reference
* @param required true if the value is required
* @param options (optional) a set of allowed values for this column
* @return the new column
*/
- public DBTableColumn addForgeinKey(DBTable target, String name, boolean
required, Options options)
+ public DBTableColumn addForeignKey(String name, DBTable target, boolean
required, Options options)
{
+ // Check target: If null then Table has not been defined yet!
+ if (target==null)
+ throw new ObjectNotValidException(target);
+ // Check key
DBColumn[] keyCols = target.getKeyColumns();
if (keyCols==null || keyCols.length!=1)
throw new InvalidArgumentException("target", target);
@@ -441,17 +464,28 @@ public class DBTable extends DBRowSet implements Cloneable
/**
* Adds a new ForgeinKey table column the column list
* The foreign table must have a single column foreign key
- * @param target the table on which to reference
* @param name the name of the new column
+ * @param target the table on which to reference
* @param required true if the value is required
- * @param options (optional) a set of allowed values for this column
* @return the new column
*/
- public final DBTableColumn addForgeinKey(DBTable target, String name,
boolean required)
+ public final DBTableColumn addForeignKey(String name, DBTable target,
boolean required)
{
- return addForgeinKey(target, name, required, null);
+ return addForeignKey(name, target, required, null);
+ }
+
+ /**
+ * Adds a Timestamp column to the current table
+ * There can only be one timestamp column per table
+ * @param name the name of the new column
+ * @return the new column
+ */
+ public DBTableColumn addTimestamp(String name)
+ {
+ DBTableColumn tsColumn = addColumn(name, DataType.TIMESTAMP, 0, true);
+ this.setTimestampColumn(tsColumn);
+ return tsColumn;
}
-
/**
* Returns the primary key.
@@ -480,8 +514,7 @@ public class DBTable extends DBRowSet implements Cloneable
*/
public void setPrimaryKey(DBColumn... columns)
{
- if (columns==null)
- throw new InvalidArgumentException("columns", columns);
+ checkParamNull("columns", columns);
// All columns must belong to this table
for (int i=0; i<columns.length; i++)
if (columns[i].getRowSet()!=this)
@@ -491,6 +524,8 @@ public class DBTable extends DBRowSet implements Cloneable
{ // compare columns
if (primaryKey.compareColumns(columns))
return; // already set
+ // warn
+ log.warn("A PrimaryKey for the Table {} has already been set.
Replacing with new one.", getName());
// new key
removeIndex(primaryKey);
}
@@ -499,6 +534,8 @@ public class DBTable extends DBRowSet implements Cloneable
{ // create primary key
primaryKey = new DBIndex(name + "_PK", DBIndexType.PRIMARY_KEY,
columns);
addIndex(primaryKey);
+ // log
+ log.debug("PrimaryKey {} of length {} has been set for table {}",
primaryKey.getName(), columns.length, getName());
}
else
{ // No primary Key
@@ -713,7 +750,7 @@ public class DBTable extends DBRowSet implements Cloneable
// Build SQL-Statement
DBCommand cmd = createRecordCommand(context);
// Set key constraints
- setKeyConstraints(cmd, key);
+ cmd.where(getKeyConstraints(key));
// Perform delete
String sqlCmd = cmd.getDelete(this);
int affected = context.executeSQL(sqlCmd, cmd.getParamValues());
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
b/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
index 2270aaa..849b101 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
@@ -1203,7 +1203,7 @@ public class DBUtils implements DBContextAware
DBObject.checkParamNull("key", key);
// set key constraints
DBCommand cmd = context.createCommand();
- rowset.setKeyConstraints(cmd, key);
+ cmd.where(rowset.getKeyConstraints(key));
// use factory of rowset
return queryBean(cmd, getRowsetBeanListFactory(beanType, rowset));
}
diff --git
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
index fdb5f10..e4c24df 100644
---
a/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
+++
b/empire-db/src/main/java/org/apache/empire/db/expr/compare/DBCompareColExpr.java
@@ -82,7 +82,7 @@ public class DBCompareColExpr extends DBCompareExpr
* Gets the DBColumnExpr object
* @return the DBColumnExpr object
*/
- public DBColumnExpr getColumnExpr()
+ public DBColumnExpr getColumn()
{
return expr;
}
@@ -91,7 +91,7 @@ public class DBCompareColExpr extends DBCompareExpr
* Gets the comparison operator
* @return the comparison operator
*/
- public DBCmpType getCmpop()
+ public DBCmpType getCmpOperator()
{
return cmpop;
}
@@ -298,7 +298,7 @@ public class DBCompareColExpr extends DBCompareExpr
if (other instanceof DBCompareColExpr)
{
DBCompareColExpr o = (DBCompareColExpr)other;
- DBColumnExpr oexpr = o.getColumnExpr();
+ DBColumnExpr oexpr = o.getColumn();
if (expr.equals(oexpr))
return true;
// unwrap
diff --git
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
index a67dec2..fff3904 100644
---
a/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
+++
b/empire-db/src/main/java/org/apache/empire/db/expr/join/DBCompareJoinExpr.java
@@ -54,7 +54,7 @@ public class DBCompareJoinExpr extends DBColumnJoinExpr
return findFirstColumn(((DBCompareAndOrExpr)expr).getLeft());
// Get Colum Expr
if (expr instanceof DBCompareColExpr)
- return ((DBCompareColExpr)expr).getColumnExpr();
+ return ((DBCompareColExpr)expr).getColumn();
// Error
log.error("Unknown class found for building a valid JOIN Expression");
return null;
diff --git
a/empire-db/src/main/java/org/apache/empire/db/expr/order/DBOrderByExpr.java
b/empire-db/src/main/java/org/apache/empire/db/expr/order/DBOrderByExpr.java
index b8e3a2e..cdff70c 100644
--- a/empire-db/src/main/java/org/apache/empire/db/expr/order/DBOrderByExpr.java
+++ b/empire-db/src/main/java/org/apache/empire/db/expr/order/DBOrderByExpr.java
@@ -45,15 +45,10 @@ public class DBOrderByExpr extends DBExpr
this.desc = desc;
}
- public DBColumnExpr getColumnExpr()
+ public DBColumnExpr getColumn()
{
return expr;
}
-
- public DBColumn getColumn()
- {
- return expr.getSourceColumn();
- }
public boolean isDescending()
{
diff --git a/empire-db/src/main/java/org/apache/empire/db/generic/TRecord.java
b/empire-db/src/main/java/org/apache/empire/db/generic/TRecord.java
index d4bd0b7..6a80227 100644
--- a/empire-db/src/main/java/org/apache/empire/db/generic/TRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/generic/TRecord.java
@@ -22,21 +22,21 @@ import org.apache.empire.db.DBContext;
import org.apache.empire.db.DBRecord;
import org.apache.empire.db.DBRowSet;
-public class TRecord<RS extends DBRowSet> extends DBRecord
+public class TRecord<T extends DBRowSet> extends DBRecord
{
private static final long serialVersionUID = 1L;
- public final RS RS;
+ public final T T; // provide access to RowSet via T
/**
* Internal constructor for DBRecord
* May be used by derived classes to provide special behaviour
*/
- protected TRecord(DBContext context, RS rowset, boolean
enableRollbackHandling)
+ protected TRecord(DBContext context, T rowset, boolean
enableRollbackHandling)
{
super(context, rowset, enableRollbackHandling);
// set the rowset for quick access
- this.RS = rowset;
+ this.T = rowset;
}
/**
@@ -44,20 +44,20 @@ public class TRecord<RS extends DBRowSet> extends DBRecord
* @param context the DBContext for this record
* @param rowset the corresponding RowSet(Table, View, Query, etc.)
*/
- public TRecord(DBContext context, RS rowset)
+ public TRecord(DBContext context, T rowset)
{
super(context, rowset);
// set the rowset for quick access
- this.RS = rowset;
+ this.T = rowset;
}
/**
* finally we know the rowset
*/
@Override
- public RS getRowSet()
+ public T getRowSet()
{
- return this.RS;
+ return this.T;
}
}
diff --git
a/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBCommandOracle.java
b/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBCommandOracle.java
index 241187c..a8c1406 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBCommandOracle.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/oracle/DBCommandOracle.java
@@ -374,7 +374,7 @@ public class DBCommandOracle extends DBCommand
for (DBCompareExpr we : this.where)
{
DBCompareColExpr cce = (DBCompareColExpr)we;
- DBColumn ccecol = cce.getColumnExpr().getUpdateColumn();
+ DBColumn ccecol = cce.getColumn().getUpdateColumn();
if (table.isKeyColumn(ccecol)&& !isSetColumn(ccecol))
{
buf.append(" AND ");