You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Øyvind Harboe (JIRA)" <ji...@apache.org> on 2010/02/24 13:56:28 UTC

[jira] Commented: (CAY-1395) createSetAllowNullToDb() return incorrect SQL statement to createSql()

    [ https://issues.apache.org/jira/browse/CAY-1395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12837765#action_12837765 ] 

Øyvind Harboe commented on CAY-1395:
------------------------------------

Without the kludge above, the SQL statement will be

ALTER xxxx NOT NULL 

instead of

ALTER XXXX NULL

as SetAllowNullToDb() invokes isMandatory() and isMandatory() returns true when converting a DbAttribute to not mandatory.


>From JdbcAdapter.java:


sqlBuffer.append(column.isMandatory() ? " NOT NULL" : " NULL");

> createSetAllowNullToDb() return incorrect SQL statement to createSql()
> ----------------------------------------------------------------------
>
>                 Key: CAY-1395
>                 URL: https://issues.apache.org/jira/browse/CAY-1395
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.0RC2
>            Reporter: Øyvind Harboe
>             Fix For: 3.0
>
>
> The problem with createSql() is that it is executed *before* the property is changed.
> The following kludge to SQLServerManagerFactory.createSetAllowNullToDb() works on my rocket...
>         return new SetAllowNullToDb(entity, column) {
>             @Override
>             public List<String> createSql(DbAdapter adapter) {
>                 StringBuffer sqlBuffer = new StringBuffer();
>                 QuotingStrategy context = adapter.getQuotingStrategy(getEntity()
>                         .getDataMap()
>                         .isQuotingSQLIdentifiers());
>                 sqlBuffer.append("ALTER TABLE ");
>                 sqlBuffer.append(context.quoteFullyQualifiedName(getEntity()));
>                 sqlBuffer.append(" ALTER COLUMN ");
>                 /* Kludge!!!! how should this be handled really??? */
>                 column.setMandatory(false);
>                 adapter.createTableAppendColumn(sqlBuffer, column);
>                 return Collections.singletonList(sqlBuffer.toString());
>             }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.