[prev in list] [next in list] [prev in thread] [next in thread]
List: turbine-torque-user
Subject: Re: PostgreSQL platform (text type) + onUpdate,onDelete,name of pk,size
From: Przemysław_Sztoch <jnavy1 () navy ! main ! pl>
Date: 2006-03-10 9:04:29
Message-ID: 4411411D.50508 () navy ! main ! pl
[Download RAW message or body]
Ad.1. My idea is wrong.
Ad.2+4+pkName. Please, check my attached proposition of the patch.
I don't properly update toString() in Table and ForeignKey class.
P.S. src/java/database.dtd is application/octet-stream. Is it correct?
Przemysław Sztoch napisał(a):
> Hello!
>
> 1. Why "text" pgsql type is mapped to Type.VARCHAR?
> a) In PostgreSqlPlatform.java is:
> info.addNativeTypeMapping(Types.LONGVARCHAR, "TEXT", Types.VARCHAR);
> b) IMO should be:
> info.addNativeTypeMapping(Types.LONGVARCHAR, "TEXT", Types.LONGVARCHAR);
>
> 2. "timestamp" and "time" should have:
> info.setHasSize(Types.TIMESTAMP, true);
> info.setHasSize(Types.TIME, true);
>
> Ref: PgSQL 8.0.3 Doc; 8.5. Date/Time Types; Table 8-9. Date/Time Types
>
> 3. COMMENT ON TABLE/COLUMN support should be added
>
> 4. No support for onUpdate/onDelete attributes of foreign-key element.
> Very easy in implementation:
> alter table cgrupa2
> add constraint fk_cgrupa2_gkom1 foreign key (gkom1_id)
> references gkom1 (gkom1_id) ON UPDATE CASCADE ON DELETE RESTRICT;
--
Przemysław Sztoch <jnavy1@navy.main.pl>
Mobile +48 (502) 400 239, GG 569973
["ddlutils-onUpdate_onDelete_pkName.patch" (text/plain)]
Index: src/java/database.dtd
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: src/java/mapping.xml
===================================================================
--- src/java/mapping.xml (revision 384285)
+++ src/java/mapping.xml (working copy)
@@ -13,6 +13,7 @@
<class name="org.apache.ddlutils.model.Table">
<element name="table">
<attribute name="name" property="name"/>
+ <attribute name="pkName" property="pkName"/>
<attribute name="description" property="description"/>
<element property="columns" updater="addColumn"/>
@@ -39,6 +40,8 @@
<element name="foreign-key">
<attribute name="foreignTable" property="foreignTableName"/>
<attribute name="name" property="name"/>
+ <attribute name="onUpdate" property="onUpdate"/>
+ <attribute name="onDelete" property="onDelete"/>
<element property="references" updater="addReference"/>
</element>
Index: src/java/org/apache/ddlutils/model/ForeignKey.java
===================================================================
--- src/java/org/apache/ddlutils/model/ForeignKey.java (revision 384285)
+++ src/java/org/apache/ddlutils/model/ForeignKey.java (working copy)
@@ -37,6 +37,10 @@
private Table _foreignTable;
/** The name of the foreign table. */
private String _foreignTableName;
+ /** The integrity action for update. */
+ private String _onUpdate;
+ /** The integrity action for delete. */
+ private String _onDelete;
/** The references between local and remote columns. */
private ListOrderedSet _references = new ListOrderedSet();
@@ -126,6 +130,46 @@
}
/**
+ * Returns the action for update.
+ *
+ * @return The name
+ */
+ public String getOnUpdate()
+ {
+ return _onUpdate;
+ }
+
+ /**
+ * Sets the action for update.
+ *
+ * @param name The name
+ */
+ public void setOnUpdate(String onUpdate)
+ {
+ _onUpdate = onUpdate;
+ }
+
+ /**
+ * Returns the action for update.
+ *
+ * @return The name
+ */
+ public String getOnDelete()
+ {
+ return _onDelete;
+ }
+
+ /**
+ * Sets the action for update.
+ *
+ * @param name The name
+ */
+ public void setOnDelete(String onDelete)
+ {
+ _onDelete = onDelete;
+ }
+
+ /**
* Returns the number of references.
*
* @return The number of references
@@ -223,6 +267,8 @@
result._name = _name;
result._foreignTableName = _foreignTableName;
result._references = new ListOrderedSet();
+ result._onUpdate = _onUpdate;
+ result._onDelete = _onDelete;
for (Iterator it = _references.iterator(); it.hasNext();)
{
@@ -247,6 +293,8 @@
return new EqualsBuilder().append(_name, other._name)
.append(_foreignTableName, \
other._foreignTableName)
.append(_references, other._references)
+ .append(_onUpdate, other._onUpdate) \
+ .append(_onDelete, other._onDelete) \
.isEquals();
}
else
@@ -264,7 +312,9 @@
public boolean equalsIgnoreCase(ForeignKey otherFk)
{
if (_name.equalsIgnoreCase(otherFk._name) &&
- _foreignTableName.equalsIgnoreCase(otherFk._foreignTableName))
+ _foreignTableName.equalsIgnoreCase(otherFk._foreignTableName) &&
+ _onUpdate.equalsIgnoreCase(otherFk._onUpdate) &&
+ _onDelete.equalsIgnoreCase(otherFk._onDelete))
{
HashSet otherRefs = new HashSet();
@@ -306,6 +356,8 @@
return new HashCodeBuilder(17, 37).append(_name)
.append(_foreignTableName)
.append(_references)
+ .append(_onUpdate)
+ .append(_onDelete)
.toHashCode();
}
Index: src/java/org/apache/ddlutils/model/Table.java
===================================================================
--- src/java/org/apache/ddlutils/model/Table.java (revision 384285)
+++ src/java/org/apache/ddlutils/model/Table.java (working copy)
@@ -48,6 +48,8 @@
private String _description = null;
/** The table's type as read from the database. */
private String _type = null;
+ /** The primary key name. */
+ private String _pkName = null;
/** The columns in this table. */
private ArrayList _columns = new ArrayList();
/** The foreign keys associated to this table. */
@@ -156,6 +158,26 @@
}
/**
+ * Returns the name of the primary key.
+ *
+ * @return The name
+ */
+ public String getPkName()
+ {
+ return _pkName;
+ }
+
+ /**
+ * Sets the name of the primary key.
+ *
+ * @param pkName The name
+ */
+ public void setPkName(String pkName)
+ {
+ _pkName = pkName;
+ }
+
+ /**
* Returns the number of columns in this table.
*
* @return The number of columns
@@ -669,6 +691,7 @@
result._schema = _schema;
result._name = _name;
result._type = _type;
+ result._pkName = _pkName;
result._columns = (ArrayList)_columns.clone();
result._foreignKeys = (ArrayList)_foreignKeys.clone();
result._indices = (ArrayList)_indices.clone();
@@ -688,6 +711,7 @@
// Note that this compares case sensitive
// TODO: For now we ignore catalog and schema (type should be irrelevant \
anyways)
return new EqualsBuilder().append(_name, \
other._name) + .append(_pkName, \
other._pkName)
.append(_columns, \
other._columns)
.append(new HashSet(_foreignKeys), new \
HashSet(other._foreignKeys))
.append(new HashSet(_indices), new \
HashSet(other._indices)) @@ -706,6 +730,7 @@
{
// TODO: For now we ignore catalog and schema (type should be irrelevant \
anyways) return new HashCodeBuilder(17, 37).append(_name)
+ .append(_pkName)
.append(_columns)
.append(new HashSet(_foreignKeys))
.append(new HashSet(_indices))
Index: src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java
===================================================================
--- src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java (revision \
384285)
+++ src/java/org/apache/ddlutils/platform/postgresql/PostgreSqlPlatform.java (working \
copy) @@ -84,6 +84,8 @@
// no support for specifying the size for these types
info.setHasSize(Types.BINARY, false);
info.setHasSize(Types.VARBINARY, false);
+ info.setHasSize(Types.TIMESTAMP, true);
+ info.setHasSize(Types.TIME, true);
setSqlBuilder(new PostgreSqlBuilder(this));
setModelReader(new PostgreSqlModelReader(this));
Index: src/java/org/apache/ddlutils/platform/SqlBuilder.java
===================================================================
--- src/java/org/apache/ddlutils/platform/SqlBuilder.java (revision 384285)
+++ src/java/org/apache/ddlutils/platform/SqlBuilder.java (working copy)
@@ -1595,6 +1595,12 @@
*/
protected void writePrimaryKeyStmt(Table table, Column[] primaryKeyColumns) \
throws IOException {
+ if (table.getPkName()!=null)
+ {
+ print("CONSTRAINT ");
+ print(table.getPkName());
+ print(" ");
+ }
print("PRIMARY KEY (");
for (int idx = 0; idx < primaryKeyColumns.length; idx++)
{
@@ -1796,7 +1802,9 @@
printIdentifier(getForeignKeyName(table, key));
print(" ");
}
- print("FOREIGN KEY (");
+ print("FOREIGN KEY");
+ writeForeignKeyOption(key);
+ print(" (");
writeLocalReferences(key);
print(") REFERENCES ");
printIdentifier(getTableName(database.findTable(key.getForeignTableName())));
@@ -1806,6 +1814,32 @@
}
}
}
+
+ protected void writeForeignKeyOption(ForeignKey key) throws IOException
+ {
+ if (key.getOnUpdate() != null && !key.getOnUpdate().equals("none"))
+ {
+ print(" ON UPDATE ");
+ if (key.getOnUpdate().equals("cascade")) {
+ print("CASCADE");
+ } else if (key.getOnUpdate().equals("setnull")) {
+ print("SET NULL");
+ } else if (key.getOnUpdate().equals("restrict")) {
+ print("RESTRICT");
+ }
+ }
+ if (key.getOnDelete() != null && !key.getOnDelete().equals("none"))
+ {
+ print(" ON DELETE ");
+ if (key.getOnDelete().equals("cascade")) {
+ print("CASCADE");
+ } else if (key.getOnDelete().equals("setnull")) {
+ print("SET NULL");
+ } else if (key.getOnDelete().equals("restrict")) {
+ print("RESTRICT");
+ }
+ }
+ }
/**
* Writes a single foreign key constraint using a alter table statement.
@@ -1826,7 +1860,9 @@
print("ADD CONSTRAINT ");
printIdentifier(getForeignKeyName(table, key));
- print(" FOREIGN KEY (");
+ print(" FOREIGN KEY");
+ writeForeignKeyOption(key);
+ print(" (");
writeLocalReferences(key);
print(") REFERENCES ");
printIdentifier(getTableName(database.findTable(key.getForeignTableName())));
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
For additional commands, e-mail: torque-user-help@db.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic