[ 
https://issues.apache.org/jira/browse/OPENJPA-1979?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13280090#comment-13280090
 ] 

Francois commented on OPENJPA-1979:
-----------------------------------

Hi.

I checked out version 2.2.0 and found that this patch wasn't applied yet.
Based on Micael's question, I modified the method as follows and I can confirm 
that it worked with constant values as numbers and text:

private Column newColumn(JoinColumn join) {
        Column col = new Column();
        if (!StringUtils.isEmpty(join.name()))
            col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit()));
        if (!StringUtils.isEmpty(join.columnDefinition()))
            
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
//        if (!StringUtils.isEmpty(join.referencedColumnName())) //f fix from 
openjpa-1979
//            
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(), 
delimit()));
        String joinColumnName = join.referencedColumnName();
        if (!StringUtils.isEmpty(joinColumnName)) {
            boolean isConstant = joinColumnName.charAt(0) == '\'';
            if(!isConstant){
                if (joinColumnName.charAt(0) == '-'
                    || joinColumnName.charAt(0) == '.'
                    || Character.isDigit(joinColumnName.charAt(0))) {
                    isConstant = true;
                    try {
                        if (joinColumnName.indexOf('.') == -1){
                            new Integer(joinColumnName);
                        } else{
                            new Double(joinColumnName);
                        }
                    } catch (NumberFormatException nfe) {
                        throw new RuntimeException("Constant Join Column is not 
a Valid Number: " + joinColumnName
                                + ", Join: " + join);
                    }
                } else if ("null".equalsIgnoreCase(joinColumnName)){
                    isConstant = true;
                }
            }

            if (isConstant) {
                
col.setTargetIdentifier(DBIdentifier.newConstant(joinColumnName));
            } else {
                col.setTargetIdentifier(DBIdentifier.newColumn(joinColumnName, 
delimit()));
            }
        }
        col.setNotNull(!join.nullable());
        col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
        col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable());
        return col;
    }
                
> Regression for non-standard joins with constant column values 
> --------------------------------------------------------------
>
>                 Key: OPENJPA-1979
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1979
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc, kernel
>    Affects Versions: 2.0.0-M1, 2.0.0
>            Reporter: Pinaki Poddar
>         Attachments: OPENJPA-1979.patch.1.txt, Test-1979.zip
>
>
> The non-standard join can use constant column values by enclosing them in 
> single-quote character. This behavior is regressed. The likely cause of this 
> regression is new delimiting support for schema elements introduced in JPA 
> 2.0. The constant column value used to be detected during schema definition 
> based on the assumption of the name being enclosed in single-quote. Due to 
> introduction of delimiting capability, the constant value is now enclosed in 
> double-quote followed by a single-quote.   
> The visible effect is failure to define schema for non-standard join with 
> constant values.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to