Simboss just did it. For bonous points we can see if he updated the bug 
with a comment :-D
Cheers,
Jody
> Thanks for the quick work. Let me know when the patch is applied 2.3.x
> branch. 
>
> Regards,
> Enam
>
>
> Jody Garnett wrote:
>   
>> Nice thank you this is great!
>>
>> Let's create a bug report and then apply your fix :-) Thanks so much for 
>> the research etc...
>> I have some time as I wait for a GeoTools build to finish so I will 
>> create the bug report for you ...
>> - http://jira.codehaus.org/browse/GEOT-1348
>>
>> I have applied your fix on trunk, if you like it we can ask that it be 
>> applied to 2.3.x as well. The revision number of
>> the commit is marked on the bug report, the bug report will be marked 
>> resolved until you confirm you
>> are happy etc...
>>
>> As long as you have the ability to test - the following bug looks to be 
>> related:
>> - http://jira.codehaus.org/browse/GEOT-1061
>>
>> Andrea I do not have a 2.3.x checkout here at work - can you apply this 
>> fix to 2.3.x please?
>> Jody
>>     
>>> This happens when the schema defines an attribute without the length of
>>> the field :
>>>
>>> AttributeType cgi = AttributeTypeFactory.newAttributeType("propertyName",
>>> String.class);
>>>
>>> This goes away when we set the length to less than 10485760 using
>>>
>>> AttributeType cgi = AttributeTypeFactory.newAttributeType("propertyName",
>>> String.class, true, 30);
>>>
>>> I tried the generated sql statement and the same error is thrown. Here is
>>> the error :
>>>
>>> ERROR: length for type varchar cannot exceed 10485760
>>> SQL state: 22023
>>>
>>> It seems like when generating the sql, the max value for VARCHAR comes up
>>> to be MAX_INT. However, postgresql requires it to be less than or equal
>>> to 10485760. From what I understand from the code in
>>> PostgisDataStore.java, the createSchema method should do a check for this
>>> case:
>>>
>>> if (length < 1) {
>>>       LOGGER.warning("FeatureType did not specify string length;
>>> defaulted to 256");
>>>       length = 256;
>>> }
>>> else if (length > MAX_ALLOWED_VALUE) // this is the check that I think
>>> should be added and MAX_ALLOWED_VALUE should be set to 10485760
>>> {
>>>       length = MAX_ALLOWED_VALUE;
>>> }
>>>
>>> The complete method follows :
>>>
>>> private StringBuffer makeSqlCreate(AttributeType[] attributeType)
>>>         throws IOException {
>>>         StringBuffer buf = new StringBuffer("");
>>>
>>>         for (int i = 0; i < attributeType.length; i++) {
>>>             String typeName = null;
>>>             typeName = (String)
>>> CLASS_MAPPINGS.get(attributeType[i].getType());
>>>             if (typeName == null)
>>>                 typeName = (String)
>>> GEOM_CLASS_MAPPINGS.get(attributeType[i].getType());
>>>
>>>             if (typeName != null) {
>>>                 if (attributeType[i] instanceof GeometryAttributeType) {
>>>                     typeName = "GEOMETRY";
>>>                 } else if (typeName.equals("VARCHAR")) {
>>>                         int length = -1;
>>>                         Filter f = attributeType[i].getRestriction();
>>>                         if(f !=null && f!=Filter.ALL && f != Filter.NONE
>>> && (f.getFilterType() == FilterType.COMPARE_LESS_THAN ||
>>> f.getFilterType() == FilterType.COMPARE_LESS_THAN_EQUAL)){
>>>                                 try{
>>>                                 CompareFilter cf = (CompareFilter)f;
>>>                                 if(cf.getLeftValue() instanceof
>>> LengthFunction){
>>>                                         length =
>>> Integer.parseInt(((LiteralExpression)cf.getRightValue()).getLiteral().toString());
>>>                                 }else{
>>>                                         if(cf.getRightValue() instanceof
>>> LengthFunction){
>>>                                         length =
>>> Integer.parseInt(((LiteralExpression)cf.getLeftValue()).getLiteral().toString());
>>>                                 }
>>>                                 }
>>>                                 }catch(NumberFormatException e){
>>>                                         length = 256;
>>>                                 }
>>>                         }else{
>>>                                 length = 256;
>>>                         }
>>>
>>>                         if (length < 1) {
>>>                                 LOGGER.warning("FeatureType did not
>>> specify string length; defaulted to 256");
>>>                                 length = 256;
>>>                         }
>>>                   else if (length > MAX_ALLOWED_VALUE)
>>>                   {
>>>                         length = MAX_ALLOWED_VALUE;
>>>                   }
>>>
>>>                     typeName = typeName + "(" + length + ")";
>>>                 }
>>>
>>>                 if (!attributeType[i].isNillable()) {
>>>                     typeName = typeName + " NOT NULL";
>>>                 }
>>>
>>>                 //TODO review!!! Is toString() always OK???
>>>                 Object defaultValue =
>>> attributeType[i].createDefaultValue();
>>>
>>>                 if (defaultValue != null) {
>>>                     typeName = typeName + " DEFAULT '"
>>>                         + defaultValue.toString() + "'";
>>>                 }
>>>
>>>                 buf.append(" \"" + attributeType[i].getName() + "\" " +
>>> typeName + ",");
>>>
>>>             } else {
>>>                 String msg;
>>>                 if (attributeType[i] == null) {
>>>                         msg = "AttributeType was null!";
>>>                 } else {
>>>                         msg = "Type '" + attributeType[i].getType() + "'
>>> not supported!";
>>>                 }
>>>                 throw (new IOException(msg));
>>>             }
>>>         }
>>>
>>>         return buf.deleteCharAt(buf.length()-1);
>>>     }
>>>
>>> Regards,
>>> Enamul Haque
>>> R & D, Redknee Inc.
>>>
>>> -----Original Message-----
>>> From: Jody Garnett [mailto:[EMAIL PROTECTED]
>>> Sent: Tuesday, June 19, 2007 3:44 PM
>>> To: Enamul Haque
>>> Cc: [email protected]
>>> Subject: Re: [Geotools-gt2-users] Postgis DataStore
>>>
>>> Enam wrote:
>>>   
>>>       
>>>> Not sure if this has been posted before. I'm getting an exception when
>>>> calling createSchema() :
>>>>
>>>> It seems like any attribute of type string uses VARCHAR(2147483647). Am
>>>> I
>>>> doing something wrong here ?
>>>>
>>>>     
>>>>         
>>> Sounds like we are doing something wrong? Can you do some research and
>>> let us know what we are supposed to be using to represent String? When I
>>> first saw your message I wondered if the createSchema statement was
>>> resulting in an SQL request that was too long.
>>>
>>> You can always try doing the same SQL as create schema generates by hand
>>> while you experiment...
>>> Cheers,
>>> Jody
>>>   
>>>       
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by DB2 Express
>> Download DB2 Express C - the FREE version of DB2 express and take
>> control of your XML. No limits. Just data. Click to get it now.
>> http://sourceforge.net/powerbar/db2/
>> _______________________________________________
>> Geotools-gt2-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>>
>>
>>     
>
>   


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to