[
http://jira.dspace.org/jira/browse/DS-335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mark Diggory updated DS-335:
----------------------------
Description:
Adding DatabaseMnager "namespace" support to create tables in other namespaces
than the dspace default namespace
Modified:
dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/DatabaseManager.java
==============================================================================
---
dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/DatabaseManager.java
(original)
+++
dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/DatabaseManager.java
Sat Oct 3 02:30:56 2009
@@ -110,7 +110,7 @@
* type attacks because we are unable to determine where the input came
from. Instead
* we could pass in static integer constants which are then mapped to their
sql name.
*/
- private static final Pattern DB_SAFE_NAME =
Pattern.compile("^[a-zA-Z_1-9]+$");
+ private static final Pattern DB_SAFE_NAME =
Pattern.compile("^[a-zA-Z_1-9.]+$");
/**
* A map of database column information. The key is the table name, a
@@ -1190,6 +1190,10 @@
{
row.setColumn(name, results.getLong(i));
}
+ else if (jdbctype == Types.DOUBLE)
+ {
+ row.setColumn(name, results.getDouble(i));
+ }
else if (jdbctype == Types.CLOB && "oracle".equals(dbName))
{
// Support CLOBs in place of TEXT columns in Oracle
@@ -1484,6 +1488,17 @@
try
{
String schema = ConfigurationManager.getProperty("db.schema");
+ String catalog = null;
+
+ int dotIndex = table.indexOf(".");
+ if (dotIndex > 0)
+ {
+ catalog = table.substring(0, dotIndex);
+ table = table.substring(dotIndex + 1, table.length());
+ log.warn("catalog: " + catalog);
+ log.warn("table: " + table);
+ }
+
connection = getConnection();
DatabaseMetaData metadata = connection.getMetaData();
@@ -1492,14 +1507,15 @@
int max = metadata.getMaxTableNameLength();
String tname = (table.length() >= max) ? table
.substring(0, max - 1) : table;
-
- pkcolumns = metadata.getPrimaryKeys(null, schema, tname);
+
+ pkcolumns = metadata.getPrimaryKeys(catalog, schema, tname);
+
Set pks = new HashSet();
while (pkcolumns.next())
pks.add(pkcolumns.getString(4));
- columns = metadata.getColumns(null, schema, tname, null);
+ columns = metadata.getColumns(catalog, schema, tname, null);
while (columns.next())
{
Modified:
dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/TableRow.java
==============================================================================
---
dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/TableRow.java
(original)
+++
dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/TableRow.java
Sat Oct 3 02:30:56 2009
@@ -230,6 +230,47 @@
}
/**
+ * Return the double value of column.
+ *
+ * If the column's type is not an float, or the column does not exist, an
+ * IllegalArgumentException is thrown.
+ *
+ * @param column
+ * The column name (case-insensitive)
+ * @return The double value of the column, or -1 if the column is an SQL
null.
+ */
+ public double getDoubleColumn(String column)
+ {
+ if (!hasColumn(column))
+ {
+ throw new IllegalArgumentException("No such column " + column);
+ }
+
+ String name = canonicalize(column);
+
+ if (isColumnNull(name))
+ {
+ return -1;
+ }
+
+ Object value = data.get(name);
+
+ if (value == null)
+ {
+ throw new IllegalArgumentException("Column " + column
+ + " not present");
+ }
+
+ if (!(value instanceof Double))
+ {
+ throw new IllegalArgumentException("Value for " + column
+ + " is not a double");
+ }
+
+ return ((Double) value).doubleValue();
+ }
+
+ /**
* Return the String value of column.
*
* If the column's type is not a String, or the column does not exist, an
@@ -504,6 +545,32 @@
}
/**
+ * Set column to the double d.
+ *
+ * If the column does not exist, an IllegalArgumentException is thrown.
+ *
+ * @param column
+ * The column name (case-insensitive)
+ * @param l
+ * The double value
+ */
+ public void setColumn(String column, double d)
+ {
+ if (!hasColumn(column))
+ {
+ throw new IllegalArgumentException("No such column " + column);
+ }
+
+ String canonName = canonicalize(column);
+ Double value = new Double(d);
+ if (!value.equals(data.get(canonName)))
+ {
+ data.put(canonName, value);
+ changed.put(canonName, Boolean.TRUE);
+ }
+ }
+
+ /**
* Set column to the date d. If the date is null, the column is set to NULL
* as well.
*
was:Adding DatabaseMnager "namespace" support to create tables in other
namespaces than the dspace default namespace
> Minho Statistics Database Manager additions.
> --------------------------------------------
>
> Key: DS-335
> URL: http://jira.dspace.org/jira/browse/DS-335
> Project: DSpace 1.x
> Issue Type: Sub-task
> Reporter: Mark Diggory
> Priority: Minor
>
> Adding DatabaseMnager "namespace" support to create tables in other
> namespaces than the dspace default namespace
> Modified:
> dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/DatabaseManager.java
> ==============================================================================
> ---
> dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/DatabaseManager.java
> (original)
> +++
> dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/DatabaseManager.java
> Sat Oct 3 02:30:56 2009
> @@ -110,7 +110,7 @@
> * type attacks because we are unable to determine where the input came
> from. Instead
> * we could pass in static integer constants which are then mapped to
> their sql name.
> */
> - private static final Pattern DB_SAFE_NAME =
> Pattern.compile("^[a-zA-Z_1-9]+$");
> + private static final Pattern DB_SAFE_NAME =
> Pattern.compile("^[a-zA-Z_1-9.]+$");
> /**
> * A map of database column information. The key is the table name, a
> @@ -1190,6 +1190,10 @@
> {
> row.setColumn(name, results.getLong(i));
> }
> + else if (jdbctype == Types.DOUBLE)
> + {
> + row.setColumn(name, results.getDouble(i));
> + }
> else if (jdbctype == Types.CLOB && "oracle".equals(dbName))
> {
> // Support CLOBs in place of TEXT columns in Oracle
> @@ -1484,6 +1488,17 @@
> try
> {
> String schema = ConfigurationManager.getProperty("db.schema");
> + String catalog = null;
> +
> + int dotIndex = table.indexOf(".");
> + if (dotIndex > 0)
> + {
> + catalog = table.substring(0, dotIndex);
> + table = table.substring(dotIndex + 1, table.length());
> + log.warn("catalog: " + catalog);
> + log.warn("table: " + table);
> + }
> +
> connection = getConnection();
> DatabaseMetaData metadata = connection.getMetaData();
> @@ -1492,14 +1507,15 @@
> int max = metadata.getMaxTableNameLength();
> String tname = (table.length() >= max) ? table
> .substring(0, max - 1) : table;
> -
> - pkcolumns = metadata.getPrimaryKeys(null, schema, tname);
> +
> + pkcolumns = metadata.getPrimaryKeys(catalog, schema, tname);
> +
> Set pks = new HashSet();
> while (pkcolumns.next())
> pks.add(pkcolumns.getString(4));
> - columns = metadata.getColumns(null, schema, tname, null);
> + columns = metadata.getColumns(catalog, schema, tname, null);
> while (columns.next())
> {
> Modified:
> dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/TableRow.java
> ==============================================================================
> ---
> dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/TableRow.java
> (original)
> +++
> dspace/trunk/dspace-api/src/main/java/org/dspace/storage/rdbms/TableRow.java
> Sat Oct 3 02:30:56 2009
> @@ -230,6 +230,47 @@
> }
> /**
> + * Return the double value of column.
> + *
> + * If the column's type is not an float, or the column does not exist, an
> + * IllegalArgumentException is thrown.
> + *
> + * @param column
> + * The column name (case-insensitive)
> + * @return The double value of the column, or -1 if the column is an SQL
> null.
> + */
> + public double getDoubleColumn(String column)
> + {
> + if (!hasColumn(column))
> + {
> + throw new IllegalArgumentException("No such column " + column);
> + }
> +
> + String name = canonicalize(column);
> +
> + if (isColumnNull(name))
> + {
> + return -1;
> + }
> +
> + Object value = data.get(name);
> +
> + if (value == null)
> + {
> + throw new IllegalArgumentException("Column " + column
> + + " not present");
> + }
> +
> + if (!(value instanceof Double))
> + {
> + throw new IllegalArgumentException("Value for " + column
> + + " is not a double");
> + }
> +
> + return ((Double) value).doubleValue();
> + }
> +
> + /**
> * Return the String value of column.
> *
> * If the column's type is not a String, or the column does not exist, an
> @@ -504,6 +545,32 @@
> }
> /**
> + * Set column to the double d.
> + *
> + * If the column does not exist, an IllegalArgumentException is thrown.
> + *
> + * @param column
> + * The column name (case-insensitive)
> + * @param l
> + * The double value
> + */
> + public void setColumn(String column, double d)
> + {
> + if (!hasColumn(column))
> + {
> + throw new IllegalArgumentException("No such column " + column);
> + }
> +
> + String canonName = canonicalize(column);
> + Double value = new Double(d);
> + if (!value.equals(data.get(canonName)))
> + {
> + data.put(canonName, value);
> + changed.put(canonName, Boolean.TRUE);
> + }
> + }
> +
> + /**
> * Set column to the date d. If the date is null, the column is set to
> NULL
> * as well.
> *
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.dspace.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
Dspace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dspace-devel