FYI: This is marked as fixed in version 1.4.182 Beta: 
http://www.h2database.com/html/changelog.html

Gili

On Tuesday, September 2, 2014 1:17:40 AM UTC-4, Gili wrote:
>
> Hi Thomas,
>
> Will this be fixed in 1.3 in the near future? I am avoiding the beta 
> builds because I am under the impression they are less stable than 1.3.
>
> Thanks,
> Gili
>
> On Saturday, August 30, 2014 7:57:14 AM UTC-4, Thomas Mueller wrote:
>>
>> Hi,
>>
>> I know what the problem is. readLong will first try to convert 
>> 9223372036854775808 
>> to a long (that doesn't work), and then negate it (that would work, but 
>> it's too late). One solution is to first negate it, and then convert to a 
>> long. See below for a possible patch (not tested).
>>
>> > It seems any negative number causes the same problem. .. CREATE TABLE 
>> connection (id BIGINT AUTO_INCREMENT(-1, 1) PRIMARY KEY)
>>
>> I think that's not the problem. Your statement (with -1) works for me.
>>
>> Patch (it also renames getInt to readInt):
>>
>> ### Eclipse Workspace Patch 1.0
>> #P h2
>> Index: src/main/org/h2/command/Parser.java
>> ===================================================================
>> --- src/main/org/h2/command/Parser.java (revision 5847)
>> +++ src/main/org/h2/command/Parser.java (working copy)
>> @@ -536,7 +536,7 @@
>>      private Prepared parseAnalyze() {
>>          Analyze command = new Analyze(session);
>>          if (readIf("SAMPLE_SIZE")) {
>> -            command.setTop(getPositiveInt());
>> +            command.setTop(readPositiveInt());
>>          }
>>          return command;
>>      }
>> @@ -2966,15 +2966,15 @@
>>          return function;
>>      }
>>  
>> -    private int getPositiveInt() {
>> -        int v = getInt();
>> +    private int readPositiveInt() {
>> +        int v = readInt();
>>          if (v < 0) {
>>              throw DbException.getInvalidValueException("positive 
>> integer", v);
>>          }
>>          return v;
>>      }
>>  
>> -    private int getInt() {
>> +    private int readInt() {
>>          boolean minus = false;
>>          if (currentTokenType == MINUS) {
>>              minus = true;
>> @@ -2982,12 +2982,16 @@
>>          } else if (currentTokenType == PLUS) {
>>              read();
>>          }
>> -        if (currentTokenType != VALUE || currentValue.getType() != 
>> Value.INT) {
>> +        if (currentTokenType != VALUE) {
>>              throw DbException.getSyntaxError(sqlCommand, parseIndex, 
>> "integer");
>>          }
>> +        if (minus) {
>> +            // must do that now, otherwise Integer.MIN_VALUE wouldn't 
>> work
>> +            currentValue = currentValue.negate();
>> +        }
>>          int i = currentValue.getInt();
>>          read();
>> -        return minus ? -i : i;
>> +        return i;
>>      }
>>  
>>      private long readLong() {
>> @@ -2995,14 +2999,19 @@
>>          if (currentTokenType == MINUS) {
>>              minus = true;
>>              read();
>> +        } else if (currentTokenType == PLUS) {
>> +            read();
>>          }
>> -        if (currentTokenType != VALUE ||
>> -                (currentValue.getType() != Value.INT && 
>> currentValue.getType() != Value.LONG)) {
>> +        if (currentTokenType != VALUE) {
>>              throw DbException.getSyntaxError(sqlCommand, parseIndex, 
>> "long");
>>          }
>> +        if (minus) {
>> +            // must do that now, otherwise Long.MIN_VALUE wouldn't work
>> +            currentValue = currentValue.negate();
>> +        }
>>          long i = currentValue.getLong();
>>          read();
>> -        return minus ? -i : i;
>> +        return i;
>>      }
>>  
>>      private boolean readBooleanSetting() {
>> @@ -3901,7 +3910,7 @@
>>              column.setSequence(sequence);
>>          }
>>          if (readIf("SELECTIVITY")) {
>> -            int value = getPositiveInt();
>> +            int value = readPositiveInt();
>>              column.setSelectivity(value);
>>          }
>>          String comment = readCommentIf();
>> @@ -4005,7 +4014,7 @@
>>                      readIf("CHAR");
>>                      if (dataType.supportsScale) {
>>                          if (readIf(",")) {
>> -                            scale = getInt();
>> +                            scale = readInt();
>>                              original += ", " + scale;
>>                          } else {
>>                              // special case: TIMESTAMP(5) actually means
>> @@ -4027,7 +4036,7 @@
>>          } else if (readIf("(")) {
>>              // Support for MySQL: INT(11), MEDIUMINT(8) and so on.
>>              // Just ignore the precision.
>> -            getPositiveInt();
>> +            readPositiveInt();
>>              read(")");
>>          }
>>          if (readIf("FOR")) {
>> @@ -4532,7 +4541,7 @@
>>              command.setRowBased(false);
>>          }
>>          if (readIf("QUEUE")) {
>> -            command.setQueueSize(getPositiveInt());
>> +            command.setQueueSize(readPositiveInt());
>>          }
>>          command.setNoWait(readIf("NOWAIT"));
>>          read("CALL");
>> @@ -4940,7 +4949,7 @@
>>              } else if (readIf("NUMBERS")) {
>>                  command.setInt(Constants.ALLOW_LITERALS_NUMBERS);
>>              } else {
>> -                command.setInt(getPositiveInt());
>> +                command.setInt(readPositiveInt());
>>              }
>>              return command;
>>          } else if (readIf("DEFAULT_TABLE_TYPE")) {
>> @@ -4951,7 +4960,7 @@
>>              } else if (readIf("CACHED")) {
>>                  command.setInt(Table.TYPE_CACHED);
>>              } else {
>> -                command.setInt(getPositiveInt());
>> +                command.setInt(readPositiveInt());
>>              }
>>              return command;
>>          } else if (readIf("CREATE")) {
>>
>>
>> Regards,
>> Thomas
>>
>>
>>
>>
>> On Sat, Aug 30, 2014 at 1:31 PM, Steve McLeod <[email protected]> 
>> wrote:
>>
>>> It is not your use of Long.MIN_VALUE that is a problem. It seems any 
>>> negative number causes the same problem. For instance, this fails with a 
>>> syntax exception:
>>>
>>> CREATE TABLE connection (id BIGINT AUTO_INCREMENT(-1, 1) PRIMARY KEY);
>>>
>>>
>>> On Saturday, 30 August 2014 08:21:54 UTC+2, Gili wrote:
>>>>
>>>> Noel,
>>>>
>>>> Both the H2 documentation and java.lang.Long.MIN_VALUE indicate that 
>>>> -9223372036854775808 is a legal value, yet H2 rejects it. Isn't this a bug?
>>>>
>>>> Gili
>>>>
>>>> On Saturday, August 30, 2014 1:36:15 AM UTC-4, Noel Grandin wrote:
>>>>>
>>>>> Our internal implementation of sequences uses longs for everything, so 
>>>>> you will need to use values for start/stop/cycle/increment that fit 
>>>>> into a long value. 
>>>>>
>>>>> On Fri, Aug 29, 2014 at 11:04 PM, Gili <[email protected]> 
>>>>> wrote: 
>>>>> > Two clarifications: 
>>>>> > 
>>>>> > I am using version 1.3.176. 
>>>>> > This behavior contradicts the documentation: 
>>>>> > http://www.h2database.com/html/datatypes.html#bigint_type 
>>>>> > 
>>>>> > Please also take this opportunity to clarify the difference between 
>>>>> IDENTITY 
>>>>> > and BIGINT in the documentation. As far as I understand it, IDENTITY 
>>>>> is 
>>>>> > equivalent to "BIGINT AUTO_INCREMENT PRIMARY KEY" but it's not clear 
>>>>> if 
>>>>> > there are any other differences. For example, the documentation 
>>>>> reads "Used 
>>>>> > values are never re-used, even when the transaction is rolled back" 
>>>>> for 
>>>>> > IDENTITY but not for BIGINT AUTO_INCREMENT so it's not clear if 
>>>>> there is 
>>>>> > some magic under the hood. 
>>>>> > 
>>>>> > Gili 
>>>>> > 
>>>>> > On Friday, August 29, 2014 4:53:16 PM UTC-4, Gili wrote: 
>>>>> >> 
>>>>> >> Hi, 
>>>>> >> 
>>>>> >> If I run: 
>>>>> >> 
>>>>> >>   CREATE TABLE connection (id BIGINT 
>>>>> >> AUTO_INCREMENT(-9223372036854775808, 
>>>>>
>>>>> >> 1) PRIMARY KEY); 
>>>>> >> 
>>>>> >> I get: 
>>>>> >> 
>>>>> >>   Syntax error in SQL statement "CREATE TABLE CONNECTION (ID BIGINT 
>>>>> >> AUTO_INCREMENT(-9223372036854775808[*], 1) PRIMARY KEY)"; expected 
>>>>> "long" 
>>>>> >> 
>>>>> >> I've successfully initialized all other types at their minimum 
>>>>> values. 
>>>>> >> BIGINT seems to be the only type that has a problem with this. 
>>>>> >> 
>>>>> >> Gili 
>>>>> > 
>>>>> > -- 
>>>>> > You received this message because you are subscribed to the Google 
>>>>> Groups 
>>>>> > "H2 Database" group. 
>>>>> > To unsubscribe from this group and stop receiving emails from it, 
>>>>> send an 
>>>>> > email to [email protected]. 
>>>>> > To post to this group, send email to [email protected]. 
>>>>> > Visit this group at http://groups.google.com/group/h2-database. 
>>>>> > For more options, visit https://groups.google.com/d/optout. 
>>>>>
>>>>  -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "H2 Database" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/h2-database.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/d/optout.

Reply via email to