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

Reply via email to