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 1c92935a EMPIREDB-443 DBTable, DBView, DBQuery make alias generation
overridable
1c92935a is described below
commit 1c92935a0b5b2b2d55c8affb601cc637005a44eb
Author: Rainer Döbele <[email protected]>
AuthorDate: Tue Oct 22 15:35:53 2024 +0200
EMPIREDB-443
DBTable, DBView, DBQuery make alias generation overridable
---
.../main/java/org/apache/empire/db/DBQuery.java | 28 +++++++++++++++++++---
.../main/java/org/apache/empire/db/DBTable.java | 17 +++++++++----
.../src/main/java/org/apache/empire/db/DBView.java | 22 +++++++++++++----
3 files changed, 55 insertions(+), 12 deletions(-)
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 67eabbd9..0c5b065b 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
@@ -57,7 +57,16 @@ public class DBQuery extends DBRowSet
// *Deprecated* private static final long serialVersionUID = 1L;
private static AtomicInteger queryCount = new AtomicInteger(0);
-
+ /**
+ * Automatically generates a new alias for this Object
+ * @param prefix the alias prefix
+ * @return an alias consisting of the prefix and a unique number
+ */
+ protected String generateAlias(String prefix)
+ {
+ return prefix + String.valueOf(queryCount.incrementAndGet());
+ }
+
/**
* DBQueryExprColumn
* @author doebele
@@ -108,6 +117,10 @@ public class DBQuery extends DBRowSet
public DBQuery(DBCommandExpr cmd, DBColumn[] keyColumns, String alias)
{ // Set the column expressions
super(cmd.getDatabase());
+ // generate alias
+ if (StringUtils.isEmpty(alias))
+ alias = generateAlias("q");
+ // set
this.cmdExpr = cmd;
this.alias = alias;
// Set Query Columns
@@ -142,7 +155,7 @@ public class DBQuery extends DBRowSet
*/
public DBQuery(DBCommandExpr cmd, DBColumn[] keyColumns)
{ // Set the column expressions
- this(cmd, keyColumns, "q" +
String.valueOf(queryCount.incrementAndGet()));
+ this(cmd, keyColumns, null);
}
/**
@@ -182,7 +195,7 @@ public class DBQuery extends DBRowSet
}
/**
- * Creaes a DBQuery object from a given command object.
+ * Creates a DBQuery object from a given command object.
*
* @param cmd the command object representing an SQL-Command.
*/
@@ -191,6 +204,15 @@ public class DBQuery extends DBRowSet
this(cmd, (DBColumn[]) null);
}
+ /**
+ * Creates a copy of an existing DBQuery object.
+ */
+ public DBQuery(DBQuery other, String newAlias)
+ {
+ this(other.cmdExpr, other.keyColumns, newAlias);
+ this.updateable = other.updateable;
+ }
+
/**
* returns the underlying command expression
* @return the command used for this query
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 971771bd..96e2ca16 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
@@ -58,6 +58,15 @@ public class DBTable extends DBRowSet implements Cloneable
public static final int INT_SIZE_BIG = 8;
private static AtomicInteger tableCount = new AtomicInteger(0);
+ /**
+ * Automatically generates a new alias for this Object
+ * @param prefix the alias prefix
+ * @return an alias consisting of the prefix and a unique number
+ */
+ protected String generateAlias(String prefix)
+ {
+ return prefix + String.valueOf(tableCount.incrementAndGet());
+ }
private final String name;
private String alias;
@@ -77,8 +86,8 @@ public class DBTable extends DBRowSet implements Cloneable
{
super(db);
// generate alias
- if (alias==null)
- alias = "t" + String.valueOf(tableCount.incrementAndGet());
+ if (StringUtils.isEmpty(alias))
+ alias = generateAlias("t");
// init
this.name = name;
this.alias = alias;
@@ -176,7 +185,7 @@ public class DBTable extends DBRowSet implements Cloneable
// set primaryKey
clone.primaryKey = clonePrimaryKey(clone);
// set new alias
- clone.alias = "t" + String.valueOf(tableCount.incrementAndGet());
+ clone.alias = generateAlias("t");
// done
log.info("clone: Table " + name + " cloned! Alias old=" + alias + "
new=" + clone.alias);
db.addTable(clone);
@@ -193,7 +202,7 @@ public class DBTable extends DBRowSet implements Cloneable
clone.primaryKey = clonePrimaryKey(clone);
// set new alias
if (StringUtils.isEmpty(newAlias))
- clone.alias = "t" +
String.valueOf(tableCount.incrementAndGet());
+ clone.alias = generateAlias("t");
else
clone.alias = newAlias;
// done
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBView.java
b/empire-db/src/main/java/org/apache/empire/db/DBView.java
index a0b183c8..f4c25e88 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBView.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBView.java
@@ -230,13 +230,22 @@ public abstract class DBView extends DBRowSet implements
Cloneable
}
private static AtomicInteger viewCount = new AtomicInteger(0);
+ /**
+ * Automatically generates a new alias for this Object
+ * @param prefix the alias prefix
+ * @return an alias consisting of the prefix and a unique number
+ */
+ protected String generateAlias(String prefix)
+ {
+ return prefix + String.valueOf(viewCount.incrementAndGet());
+ }
- private String name;
+ private final String name;
private String alias;
private DBViewColumn[] keyColumns;
private boolean updateable; // true if
the view is updateable
private Boolean quoteName = null;
-
+
/**
* Creates a view object for a given view in the database.
*
@@ -248,6 +257,9 @@ public abstract class DBView extends DBRowSet implements
Cloneable
public DBView(String name, DBDatabase db, boolean isUpdateable, String
alias)
{ // Set the column expressions
super(db);
+ // generate alias
+ if (StringUtils.isEmpty(alias))
+ alias = generateAlias("v");
// Set Name and Alias
this.name = name;
this.alias = alias;
@@ -266,7 +278,7 @@ public abstract class DBView extends DBRowSet implements
Cloneable
*/
public DBView(String name, DBDatabase db, boolean isUpdateable)
{ // Set the column expressions
- this(name, db, isUpdateable, "v" +
String.valueOf(viewCount.incrementAndGet()));
+ this(name, db, isUpdateable, null);
}
/**
@@ -292,7 +304,7 @@ public abstract class DBView extends DBRowSet implements
Cloneable
// set key columns
clone.keyColumns = cloneKeyColumns(clone);
// set new alias
- clone.alias = "v" + String.valueOf(viewCount.incrementAndGet());
+ clone.alias = generateAlias("v");
// done
log.info("clone: Table " + name + " cloned! Alias old=" + alias + "
new=" + clone.alias);
db.addView(clone);
@@ -314,7 +326,7 @@ public abstract class DBView extends DBRowSet implements
Cloneable
clone.keyColumns = cloneKeyColumns(clone);
// set new alias
if (StringUtils.isEmpty(newAlias))
- clone.alias = "t" +
String.valueOf(viewCount.incrementAndGet());
+ clone.alias = generateAlias("v");
else
clone.alias = newAlias;
// done