public class org.h2.expression.BinaryOperation extends org.h2.expression.Expression
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.h2.expression.BinaryOperation
  super_class: org.h2.expression.Expression
{
  private org.h2.expression.BinaryOperation$OpType opType;
    descriptor: Lorg/h2/expression/BinaryOperation$OpType;
    flags: (0x0002) ACC_PRIVATE

  private org.h2.expression.Expression left;
    descriptor: Lorg/h2/expression/Expression;
    flags: (0x0002) ACC_PRIVATE

  private org.h2.expression.Expression right;
    descriptor: Lorg/h2/expression/Expression;
    flags: (0x0002) ACC_PRIVATE

  private org.h2.value.TypeInfo type;
    descriptor: Lorg/h2/value/TypeInfo;
    flags: (0x0002) ACC_PRIVATE

  private boolean convertRight;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private static volatile int[] $SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType;
    descriptor: [I
    flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC

  public void <init>(org.h2.expression.BinaryOperation$OpType, org.h2.expression.Expression, org.h2.expression.Expression);
    descriptor: (Lorg/h2/expression/BinaryOperation$OpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.expression.BinaryOperation$OpType opType
        start local 2 // org.h2.expression.Expression left
        start local 3 // org.h2.expression.Expression right
         0: .line 65
            aload 0 /* this */
            invokespecial org.h2.expression.Expression.<init>:()V
         1: .line 63
            aload 0 /* this */
            iconst_1
            putfield org.h2.expression.BinaryOperation.convertRight:Z
         2: .line 66
            aload 0 /* this */
            aload 1 /* opType */
            putfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
         3: .line 67
            aload 0 /* this */
            aload 2 /* left */
            putfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
         4: .line 68
            aload 0 /* this */
            aload 3 /* right */
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
         5: .line 69
            return
        end local 3 // org.h2.expression.Expression right
        end local 2 // org.h2.expression.Expression left
        end local 1 // org.h2.expression.BinaryOperation$OpType opType
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    6     0    this  Lorg/h2/expression/BinaryOperation;
            0    6     1  opType  Lorg/h2/expression/BinaryOperation$OpType;
            0    6     2    left  Lorg/h2/expression/Expression;
            0    6     3   right  Lorg/h2/expression/Expression;
    MethodParameters:
        Name  Flags
      opType  
      left    
      right   

  public java.lang.StringBuilder getSQL(java.lang.StringBuilder, boolean);
    descriptor: (Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // java.lang.StringBuilder builder
        start local 2 // boolean alwaysQuote
         0: .line 75
            aload 1 /* builder */
            bipush 40
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
         1: .line 76
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* builder */
            iload 2 /* alwaysQuote */
            invokevirtual org.h2.expression.Expression.getSQL:(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
            bipush 32
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual org.h2.expression.BinaryOperation.getOperationToken:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            bipush 32
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
         2: .line 77
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* builder */
            iload 2 /* alwaysQuote */
            invokevirtual org.h2.expression.Expression.getSQL:(Ljava/lang/StringBuilder;Z)Ljava/lang/StringBuilder;
            bipush 41
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            areturn
        end local 2 // boolean alwaysQuote
        end local 1 // java.lang.StringBuilder builder
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0         this  Lorg/h2/expression/BinaryOperation;
            0    3     1      builder  Ljava/lang/StringBuilder;
            0    3     2  alwaysQuote  Z
    MethodParameters:
             Name  Flags
      builder      
      alwaysQuote  

  private java.lang.String getOperationToken();
    descriptor: ()Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.h2.expression.BinaryOperation this
         0: .line 81
            invokestatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:()[I
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iaload
            tableswitch { // 1 - 6
                    1: 1
                    2: 2
                    3: 3
                    4: 4
                    5: 5
                    6: 6
              default: 7
          }
         1: .line 83
      StackMap locals:
      StackMap stack:
            ldc "||"
            areturn
         2: .line 85
      StackMap locals:
      StackMap stack:
            ldc "+"
            areturn
         3: .line 87
      StackMap locals:
      StackMap stack:
            ldc "-"
            areturn
         4: .line 89
      StackMap locals:
      StackMap stack:
            ldc "*"
            areturn
         5: .line 91
      StackMap locals:
      StackMap stack:
            ldc "/"
            areturn
         6: .line 93
      StackMap locals:
      StackMap stack:
            ldc "%"
            areturn
         7: .line 95
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "opType="
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lorg/h2/expression/BinaryOperation;

  public org.h2.value.Value getValue(org.h2.engine.Session);
    descriptor: (Lorg/h2/engine/Session;)Lorg/h2/value/Value;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=2
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.engine.Session session
         0: .line 101
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            invokevirtual org.h2.engine.Database.getMode:()Lorg/h2/engine/Mode;
            astore 2 /* mode */
        start local 2 // org.h2.engine.Mode mode
         1: .line 102
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* session */
            invokevirtual org.h2.expression.Expression.getValue:(Lorg/h2/engine/Session;)Lorg/h2/value/Value;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
            aload 2 /* mode */
            aconst_null
            invokevirtual org.h2.value.Value.convertTo:(Lorg/h2/value/TypeInfo;Lorg/h2/engine/Mode;Ljava/lang/Object;)Lorg/h2/value/Value;
            astore 3 /* l */
        start local 3 // org.h2.value.Value l
         2: .line 103
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* session */
            invokevirtual org.h2.expression.Expression.getValue:(Lorg/h2/engine/Session;)Lorg/h2/value/Value;
            astore 4 /* r */
        start local 4 // org.h2.value.Value r
         3: .line 104
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.convertRight:Z
            ifeq 5
         4: .line 105
            aload 4 /* r */
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
            aload 2 /* mode */
            aconst_null
            invokevirtual org.h2.value.Value.convertTo:(Lorg/h2/value/TypeInfo;Lorg/h2/engine/Mode;Ljava/lang/Object;)Lorg/h2/value/Value;
            astore 4 /* r */
         5: .line 107
      StackMap locals: org.h2.engine.Mode org.h2.value.Value org.h2.value.Value
      StackMap stack:
            invokestatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:()[I
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iaload
            tableswitch { // 1 - 6
                    1: 6
                    2: 19
                    3: 22
                    4: 25
                    5: 28
                    6: 31
              default: 34
          }
         6: .line 109
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 10
         7: .line 110
            aload 2 /* mode */
            getfield org.h2.engine.Mode.nullConcatIsNull:Z
            ifeq 9
         8: .line 111
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
         9: .line 113
      StackMap locals:
      StackMap stack:
            aload 4 /* r */
            areturn
        10: .line 114
      StackMap locals:
      StackMap stack:
            aload 4 /* r */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 14
        11: .line 115
            aload 2 /* mode */
            getfield org.h2.engine.Mode.nullConcatIsNull:Z
            ifeq 13
        12: .line 116
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
        13: .line 118
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            areturn
        14: .line 120
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            invokevirtual org.h2.value.Value.getString:()Ljava/lang/String;
            astore 5 /* s1 */
        start local 5 // java.lang.String s1
        15: aload 4 /* r */
            invokevirtual org.h2.value.Value.getString:()Ljava/lang/String;
            astore 6 /* s2 */
        start local 6 // java.lang.String s2
        16: .line 121
            new java.lang.StringBuilder
            dup
            aload 5 /* s1 */
            invokevirtual java.lang.String.length:()I
            aload 6 /* s2 */
            invokevirtual java.lang.String.length:()I
            iadd
            invokespecial java.lang.StringBuilder.<init>:(I)V
            astore 7 /* buff */
        start local 7 // java.lang.StringBuilder buff
        17: .line 122
            aload 7 /* buff */
            aload 5 /* s1 */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 6 /* s2 */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
        18: .line 123
            aload 7 /* buff */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.value.ValueString.get:(Ljava/lang/String;)Lorg/h2/value/Value;
            areturn
        end local 7 // java.lang.StringBuilder buff
        end local 6 // java.lang.String s2
        end local 5 // java.lang.String s1
        19: .line 126
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 20
            aload 4 /* r */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 21
        20: .line 127
      StackMap locals:
      StackMap stack:
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
        21: .line 129
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            aload 4 /* r */
            invokevirtual org.h2.value.Value.add:(Lorg/h2/value/Value;)Lorg/h2/value/Value;
            areturn
        22: .line 131
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 23
            aload 4 /* r */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 24
        23: .line 132
      StackMap locals:
      StackMap stack:
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
        24: .line 134
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            aload 4 /* r */
            invokevirtual org.h2.value.Value.subtract:(Lorg/h2/value/Value;)Lorg/h2/value/Value;
            areturn
        25: .line 136
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 26
            aload 4 /* r */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 27
        26: .line 137
      StackMap locals:
      StackMap stack:
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
        27: .line 139
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            aload 4 /* r */
            invokevirtual org.h2.value.Value.multiply:(Lorg/h2/value/Value;)Lorg/h2/value/Value;
            areturn
        28: .line 141
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 29
            aload 4 /* r */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 30
        29: .line 142
      StackMap locals:
      StackMap stack:
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
        30: .line 144
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            aload 4 /* r */
            invokevirtual org.h2.value.Value.divide:(Lorg/h2/value/Value;)Lorg/h2/value/Value;
            areturn
        31: .line 146
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 32
            aload 4 /* r */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpne 33
        32: .line 147
      StackMap locals:
      StackMap stack:
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            areturn
        33: .line 149
      StackMap locals:
      StackMap stack:
            aload 3 /* l */
            aload 4 /* r */
            invokevirtual org.h2.value.Value.modulus:(Lorg/h2/value/Value;)Lorg/h2/value/Value;
            areturn
        34: .line 151
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "type="
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
        end local 4 // org.h2.value.Value r
        end local 3 // org.h2.value.Value l
        end local 2 // org.h2.engine.Mode mode
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   35     0     this  Lorg/h2/expression/BinaryOperation;
            0   35     1  session  Lorg/h2/engine/Session;
            1   35     2     mode  Lorg/h2/engine/Mode;
            2   35     3        l  Lorg/h2/value/Value;
            3   35     4        r  Lorg/h2/value/Value;
           15   19     5       s1  Ljava/lang/String;
           16   19     6       s2  Ljava/lang/String;
           17   19     7     buff  Ljava/lang/StringBuilder;
    MethodParameters:
         Name  Flags
      session  

  public void mapColumns(org.h2.table.ColumnResolver, int, int);
    descriptor: (Lorg/h2/table/ColumnResolver;II)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.table.ColumnResolver resolver
        start local 2 // int level
        start local 3 // int state
         0: .line 157
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* resolver */
            iload 2 /* level */
            iload 3 /* state */
            invokevirtual org.h2.expression.Expression.mapColumns:(Lorg/h2/table/ColumnResolver;II)V
         1: .line 158
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* resolver */
            iload 2 /* level */
            iload 3 /* state */
            invokevirtual org.h2.expression.Expression.mapColumns:(Lorg/h2/table/ColumnResolver;II)V
         2: .line 159
            return
        end local 3 // int state
        end local 2 // int level
        end local 1 // org.h2.table.ColumnResolver resolver
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    3     0      this  Lorg/h2/expression/BinaryOperation;
            0    3     1  resolver  Lorg/h2/table/ColumnResolver;
            0    3     2     level  I
            0    3     3     state  I
    MethodParameters:
          Name  Flags
      resolver  
      level     
      state     

  public org.h2.expression.Expression optimize(org.h2.engine.Session);
    descriptor: (Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=2
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.engine.Session session
         0: .line 163
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* session */
            invokevirtual org.h2.expression.Expression.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            putfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
         1: .line 164
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* session */
            invokevirtual org.h2.expression.Expression.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
         2: .line 165
            invokestatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:()[I
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iaload
            tableswitch { // 1 - 6
                    1: 3
                    2: 12
                    3: 12
                    4: 12
                    5: 12
                    6: 12
              default: 35
          }
         3: .line 167
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.getType:()Lorg/h2/value/TypeInfo;
            astore 2 /* l */
        start local 2 // org.h2.value.TypeInfo l
         4: aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.getType:()Lorg/h2/value/TypeInfo;
            astore 3 /* r */
        start local 3 // org.h2.value.TypeInfo r
         5: .line 168
            aload 2 /* l */
            invokevirtual org.h2.value.TypeInfo.getValueType:()I
            invokestatic org.h2.value.DataType.isStringType:(I)Z
            ifeq 10
            aload 3 /* r */
            invokevirtual org.h2.value.TypeInfo.getValueType:()I
            invokestatic org.h2.value.DataType.isStringType:(I)Z
            ifeq 10
         6: .line 169
            aload 2 /* l */
            invokevirtual org.h2.value.TypeInfo.getPrecision:()J
            aload 3 /* r */
            invokevirtual org.h2.value.TypeInfo.getPrecision:()J
            ladd
            lstore 4 /* precision */
        start local 4 // long precision
         7: .line 170
            lload 4 /* precision */
            lconst_0
            lcmp
            iflt 10
            lload 4 /* precision */
            ldc 2147483647
            lcmp
            ifge 10
         8: .line 171
            aload 0 /* this */
            bipush 13
            lload 4 /* precision */
            iconst_0
            aconst_null
            invokestatic org.h2.value.TypeInfo.getTypeInfo:(IJILorg/h2/value/ExtTypeInfo;)Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
         9: .line 172
            goto 36
        end local 4 // long precision
        10: .line 175
      StackMap locals: org.h2.value.TypeInfo org.h2.value.TypeInfo
      StackMap stack:
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_STRING:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        11: .line 176
            goto 36
        end local 3 // org.h2.value.TypeInfo r
        end local 2 // org.h2.value.TypeInfo l
        12: .line 183
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.getType:()Lorg/h2/value/TypeInfo;
            invokevirtual org.h2.value.TypeInfo.getValueType:()I
            istore 2 /* l */
        start local 2 // int l
        13: .line 184
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.getType:()Lorg/h2/value/TypeInfo;
            invokevirtual org.h2.value.TypeInfo.getValueType:()I
            istore 3 /* r */
        start local 3 // int r
        14: .line 185
            iload 2 /* l */
            ifne 15
            iload 3 /* r */
            ifeq 16
        15: .line 186
      StackMap locals: int int
      StackMap stack:
            iload 2 /* l */
            iconst_m1
            if_icmpne 23
            iload 3 /* r */
            iconst_m1
            if_icmpne 23
        16: .line 189
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            getstatic org.h2.expression.BinaryOperation$OpType.PLUS:Lorg/h2/expression/BinaryOperation$OpType;
            if_acmpne 21
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
        17: .line 190
            invokevirtual org.h2.engine.Database.getMode:()Lorg/h2/engine/Mode;
            getfield org.h2.engine.Mode.allowPlusForStringConcat:Z
            ifeq 21
        18: .line 191
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_STRING:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        19: .line 192
            aload 0 /* this */
            getstatic org.h2.expression.BinaryOperation$OpType.CONCAT:Lorg/h2/expression/BinaryOperation$OpType;
            putfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
        20: .line 193
            goto 36
        21: .line 194
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_DECIMAL_DEFAULT:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        22: .line 196
            goto 36
      StackMap locals:
      StackMap stack:
        23: iload 2 /* l */
            invokestatic org.h2.value.DataType.isIntervalType:(I)Z
            ifne 24
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isIntervalType:(I)Z
            ifeq 25
        24: .line 197
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* session */
            iload 2 /* l */
            iload 3 /* r */
            invokevirtual org.h2.expression.BinaryOperation.optimizeInterval:(Lorg/h2/engine/Session;II)Lorg/h2/expression/Expression;
            areturn
        25: .line 198
      StackMap locals:
      StackMap stack:
            iload 2 /* l */
            invokestatic org.h2.value.DataType.isDateTimeType:(I)Z
            ifne 26
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isDateTimeType:(I)Z
            ifeq 27
        26: .line 199
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* session */
            iload 2 /* l */
            iload 3 /* r */
            invokevirtual org.h2.expression.BinaryOperation.optimizeDateTime:(Lorg/h2/engine/Session;II)Lorg/h2/expression/Expression;
            areturn
        27: .line 201
      StackMap locals:
      StackMap stack:
            iload 2 /* l */
            iload 3 /* r */
            invokestatic org.h2.value.Value.getHigherOrder:(II)I
            istore 4 /* dataType */
        start local 4 // int dataType
        28: .line 202
            iload 4 /* dataType */
            bipush 25
            if_icmpne 31
        29: .line 203
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_INT:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        30: .line 204
            goto 36
        31: .line 205
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            iload 4 /* dataType */
            invokestatic org.h2.value.TypeInfo.getTypeInfo:(I)Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        32: .line 206
            iload 4 /* dataType */
            invokestatic org.h2.value.DataType.isStringType:(I)Z
            ifeq 36
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            invokevirtual org.h2.engine.Database.getMode:()Lorg/h2/engine/Mode;
            getfield org.h2.engine.Mode.allowPlusForStringConcat:Z
            ifeq 36
        33: .line 207
            aload 0 /* this */
            getstatic org.h2.expression.BinaryOperation$OpType.CONCAT:Lorg/h2/expression/BinaryOperation$OpType;
            putfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
        end local 4 // int dataType
        34: .line 211
            goto 36
        end local 3 // int r
        end local 2 // int l
        35: .line 213
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "type="
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
        36: .line 215
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.isConstant:()Z
            ifeq 38
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.isConstant:()Z
            ifeq 38
        37: .line 216
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.h2.expression.BinaryOperation.getValue:(Lorg/h2/engine/Session;)Lorg/h2/value/Value;
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
            areturn
        38: .line 218
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            areturn
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   39     0       this  Lorg/h2/expression/BinaryOperation;
            0   39     1    session  Lorg/h2/engine/Session;
            4   12     2          l  Lorg/h2/value/TypeInfo;
            5   12     3          r  Lorg/h2/value/TypeInfo;
            7   10     4  precision  J
           13   35     2          l  I
           14   35     3          r  I
           28   34     4   dataType  I
    MethodParameters:
         Name  Flags
      session  

  private org.h2.expression.Expression optimizeInterval(org.h2.engine.Session, int, int);
    descriptor: (Lorg/h2/engine/Session;II)Lorg/h2/expression/Expression;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=10, args_size=4
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.engine.Session session
        start local 2 // int l
        start local 3 // int r
         0: .line 222
            iconst_0
            istore 4 /* lInterval */
        start local 4 // boolean lInterval
         1: iconst_0
            istore 5 /* lNumeric */
        start local 5 // boolean lNumeric
         2: iconst_0
            istore 6 /* lDateTime */
        start local 6 // boolean lDateTime
         3: .line 223
            iload 2 /* l */
            invokestatic org.h2.value.DataType.isIntervalType:(I)Z
            ifeq 6
         4: .line 224
            iconst_1
            istore 4 /* lInterval */
         5: .line 225
            goto 13
      StackMap locals: int int int
      StackMap stack:
         6: iload 2 /* l */
            invokestatic org.h2.value.DataType.isNumericType:(I)Z
            ifeq 9
         7: .line 226
            iconst_1
            istore 5 /* lNumeric */
         8: .line 227
            goto 13
      StackMap locals:
      StackMap stack:
         9: iload 2 /* l */
            invokestatic org.h2.value.DataType.isDateTimeType:(I)Z
            ifeq 12
        10: .line 228
            iconst_1
            istore 6 /* lDateTime */
        11: .line 229
            goto 13
        12: .line 230
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* l */
            iload 3 /* r */
            invokevirtual org.h2.expression.BinaryOperation.getUnsupported:(II)Lorg/h2/message/DbException;
            athrow
        13: .line 232
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 7 /* rInterval */
        start local 7 // boolean rInterval
        14: iconst_0
            istore 8 /* rNumeric */
        start local 8 // boolean rNumeric
        15: iconst_0
            istore 9 /* rDateTime */
        start local 9 // boolean rDateTime
        16: .line 233
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isIntervalType:(I)Z
            ifeq 19
        17: .line 234
            iconst_1
            istore 7 /* rInterval */
        18: .line 235
            goto 26
      StackMap locals: int int int
      StackMap stack:
        19: iload 3 /* r */
            invokestatic org.h2.value.DataType.isNumericType:(I)Z
            ifeq 22
        20: .line 236
            iconst_1
            istore 8 /* rNumeric */
        21: .line 237
            goto 26
      StackMap locals:
      StackMap stack:
        22: iload 3 /* r */
            invokestatic org.h2.value.DataType.isDateTimeType:(I)Z
            ifeq 25
        23: .line 238
            iconst_1
            istore 9 /* rDateTime */
        24: .line 239
            goto 26
        25: .line 240
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* l */
            iload 3 /* r */
            invokevirtual org.h2.expression.BinaryOperation.getUnsupported:(II)Lorg/h2/message/DbException;
            athrow
        26: .line 242
      StackMap locals:
      StackMap stack:
            invokestatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:()[I
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iaload
            tableswitch { // 2 - 5
                    2: 27
                    3: 38
                    4: 45
                    5: 49
              default: 51
          }
        27: .line 244
      StackMap locals:
      StackMap stack:
            iload 4 /* lInterval */
            ifeq 30
            iload 7 /* rInterval */
            ifeq 30
        28: .line 245
            iload 2 /* l */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            if_icmpne 51
        29: .line 246
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.INTERVAL_PLUS_INTERVAL:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        30: .line 248
      StackMap locals:
      StackMap stack:
            iload 4 /* lInterval */
            ifeq 34
            iload 9 /* rDateTime */
            ifeq 34
        31: .line 249
            iload 3 /* r */
            bipush 9
            if_icmpne 33
            iload 2 /* l */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            ifeq 33
        32: .line 250
            goto 51
        33: .line 252
      StackMap locals:
      StackMap stack:
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.DATETIME_PLUS_INTERVAL:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        34: .line 253
      StackMap locals:
      StackMap stack:
            iload 6 /* lDateTime */
            ifeq 51
            iload 7 /* rInterval */
            ifeq 51
        35: .line 254
            iload 2 /* l */
            bipush 9
            if_icmpne 37
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            ifeq 37
        36: .line 255
            goto 51
        37: .line 257
      StackMap locals:
      StackMap stack:
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.DATETIME_PLUS_INTERVAL:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        38: .line 261
      StackMap locals:
      StackMap stack:
            iload 4 /* lInterval */
            ifeq 41
            iload 7 /* rInterval */
            ifeq 41
        39: .line 262
            iload 2 /* l */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            if_icmpne 51
        40: .line 263
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.INTERVAL_MINUS_INTERVAL:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        41: .line 265
      StackMap locals:
      StackMap stack:
            iload 6 /* lDateTime */
            ifeq 51
            iload 7 /* rInterval */
            ifeq 51
        42: .line 266
            iload 2 /* l */
            bipush 9
            if_icmpne 44
            iload 3 /* r */
            invokestatic org.h2.value.DataType.isYearMonthIntervalType:(I)Z
            ifeq 44
        43: .line 267
            goto 51
        44: .line 269
      StackMap locals:
      StackMap stack:
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.DATETIME_MINUS_INTERVAL:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        45: .line 273
      StackMap locals:
      StackMap stack:
            iload 4 /* lInterval */
            ifeq 47
            iload 8 /* rNumeric */
            ifeq 47
        46: .line 274
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.INTERVAL_MULTIPLY_NUMERIC:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        47: .line 275
      StackMap locals:
      StackMap stack:
            iload 5 /* lNumeric */
            ifeq 51
            iload 7 /* rInterval */
            ifeq 51
        48: .line 276
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.INTERVAL_MULTIPLY_NUMERIC:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        49: .line 280
      StackMap locals:
      StackMap stack:
            iload 4 /* lInterval */
            ifeq 51
            iload 8 /* rNumeric */
            ifeq 51
        50: .line 281
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.INTERVAL_DIVIDE_NUMERIC:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        51: .line 286
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* l */
            iload 3 /* r */
            invokevirtual org.h2.expression.BinaryOperation.getUnsupported:(II)Lorg/h2/message/DbException;
            athrow
        end local 9 // boolean rDateTime
        end local 8 // boolean rNumeric
        end local 7 // boolean rInterval
        end local 6 // boolean lDateTime
        end local 5 // boolean lNumeric
        end local 4 // boolean lInterval
        end local 3 // int r
        end local 2 // int l
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   52     0       this  Lorg/h2/expression/BinaryOperation;
            0   52     1    session  Lorg/h2/engine/Session;
            0   52     2          l  I
            0   52     3          r  I
            1   52     4  lInterval  Z
            2   52     5   lNumeric  Z
            3   52     6  lDateTime  Z
           14   52     7  rInterval  Z
           15   52     8   rNumeric  Z
           16   52     9  rDateTime  Z
    MethodParameters:
         Name  Flags
      session  
      l        
      r        

  private org.h2.expression.Expression optimizeDateTime(org.h2.engine.Session, int, int);
    descriptor: (Lorg/h2/engine/Session;II)Lorg/h2/expression/Expression;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=4
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.engine.Session session
        start local 2 // int l
        start local 3 // int r
         0: .line 290
            invokestatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:()[I
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.opType:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iaload
            tableswitch { // 2 - 5
                    2: 1
                    3: 30
                    4: 60
                    5: 69
              default: 73
          }
         1: .line 292
      StackMap locals:
      StackMap stack:
            iload 3 /* r */
            iload 2 /* l */
            iload 3 /* r */
            invokestatic org.h2.value.Value.getHigherOrder:(II)I
            if_icmpeq 6
         2: .line 294
            aload 0 /* this */
            invokevirtual org.h2.expression.BinaryOperation.swap:()V
         3: .line 295
            iload 2 /* l */
            istore 4 /* t */
        start local 4 // int t
         4: .line 296
            iload 3 /* r */
            istore 2 /* l */
         5: .line 297
            iload 4 /* t */
            istore 3 /* r */
        end local 4 // int t
         6: .line 299
      StackMap locals:
      StackMap stack:
            iload 2 /* l */
            tableswitch { // 4 - 9
                    4: 7
                    5: 29
                    6: 13
                    7: 13
                    8: 13
                    9: 24
              default: 29
          }
         7: .line 302
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            ldc "DATEADD"
            invokestatic org.h2.expression.function.Function.getFunction:(Lorg/h2/engine/Database;Ljava/lang/String;)Lorg/h2/expression/function/Function;
            astore 4 /* f */
        start local 4 // org.h2.expression.function.Function f
         8: .line 303
            aload 4 /* f */
            iconst_0
            ldc "DAY"
            invokestatic org.h2.value.ValueString.get:(Ljava/lang/String;)Lorg/h2/value/Value;
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
         9: .line 304
            aload 4 /* f */
            iconst_1
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        10: .line 305
            aload 4 /* f */
            iconst_2
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        11: .line 306
            aload 4 /* f */
            invokevirtual org.h2.expression.function.Function.doneWithParameters:()V
        12: .line 307
            aload 4 /* f */
            aload 1 /* session */
            invokevirtual org.h2.expression.function.Function.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            areturn
        end local 4 // org.h2.expression.function.Function f
        13: .line 313
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            ldc "DATEADD"
            invokestatic org.h2.expression.function.Function.getFunction:(Lorg/h2/engine/Database;Ljava/lang/String;)Lorg/h2/expression/function/Function;
            astore 4 /* f */
        start local 4 // org.h2.expression.function.Function f
        14: .line 314
            aload 4 /* f */
            iconst_0
            ldc "SECOND"
            invokestatic org.h2.value.ValueString.get:(Ljava/lang/String;)Lorg/h2/value/Value;
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        15: .line 315
            aload 0 /* this */
            new org.h2.expression.BinaryOperation
            dup
            getstatic org.h2.expression.BinaryOperation$OpType.MULTIPLY:Lorg/h2/expression/BinaryOperation$OpType;
        16: .line 316
            ldc 86400
            invokestatic org.h2.value.ValueInt.get:(I)Lorg/h2/value/ValueInt;
        17: .line 315
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
        18: .line 316
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.BinaryOperation.<init>:(Lorg/h2/expression/BinaryOperation$OpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
        19: .line 315
            putfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
        20: .line 317
            aload 4 /* f */
            iconst_1
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        21: .line 318
            aload 4 /* f */
            iconst_2
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        22: .line 319
            aload 4 /* f */
            invokevirtual org.h2.expression.function.Function.doneWithParameters:()V
        23: .line 320
            aload 4 /* f */
            aload 1 /* session */
            invokevirtual org.h2.expression.function.Function.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            areturn
        end local 4 // org.h2.expression.function.Function f
        24: .line 323
      StackMap locals:
      StackMap stack:
            iload 3 /* r */
            bipush 9
            if_icmpeq 25
            iload 3 /* r */
            bipush 24
            if_icmpne 27
        25: .line 324
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 3 /* r */
            invokestatic org.h2.value.TypeInfo.getTypeInfo:(I)Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        26: .line 325
            aload 0 /* this */
            areturn
        27: .line 327
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_TIMESTAMP:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        28: .line 328
            aload 0 /* this */
            areturn
        29: .line 331
      StackMap locals:
      StackMap stack:
            goto 73
        30: .line 333
      StackMap locals:
      StackMap stack:
            iload 2 /* l */
            lookupswitch { // 4
                    9: 57
                   10: 31
                   11: 31
                   24: 31
              default: 59
          }
        31: .line 337
      StackMap locals:
      StackMap stack:
            iload 3 /* r */
            lookupswitch { // 8
                    4: 32
                    6: 40
                    7: 40
                    8: 40
                    9: 53
                   10: 55
                   11: 55
                   24: 55
              default: 56
          }
        32: .line 340
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            ldc "DATEADD"
            invokestatic org.h2.expression.function.Function.getFunction:(Lorg/h2/engine/Database;Ljava/lang/String;)Lorg/h2/expression/function/Function;
            astore 4 /* f */
        start local 4 // org.h2.expression.function.Function f
        33: .line 341
            aload 4 /* f */
            iconst_0
            ldc "DAY"
            invokestatic org.h2.value.ValueString.get:(Ljava/lang/String;)Lorg/h2/value/Value;
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        34: .line 342
            aload 0 /* this */
            new org.h2.expression.UnaryOperation
            dup
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.UnaryOperation.<init>:(Lorg/h2/expression/Expression;)V
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
        35: .line 343
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* session */
            invokevirtual org.h2.expression.Expression.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
        36: .line 344
            aload 4 /* f */
            iconst_1
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        37: .line 345
            aload 4 /* f */
            iconst_2
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        38: .line 346
            aload 4 /* f */
            invokevirtual org.h2.expression.function.Function.doneWithParameters:()V
        39: .line 347
            aload 4 /* f */
            aload 1 /* session */
            invokevirtual org.h2.expression.function.Function.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            areturn
        end local 4 // org.h2.expression.function.Function f
        40: .line 353
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            ldc "DATEADD"
            invokestatic org.h2.expression.function.Function.getFunction:(Lorg/h2/engine/Database;Ljava/lang/String;)Lorg/h2/expression/function/Function;
            astore 4 /* f */
        start local 4 // org.h2.expression.function.Function f
        41: .line 354
            aload 4 /* f */
            iconst_0
            ldc "SECOND"
            invokestatic org.h2.value.ValueString.get:(Ljava/lang/String;)Lorg/h2/value/Value;
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        42: .line 355
            aload 0 /* this */
            new org.h2.expression.BinaryOperation
            dup
            getstatic org.h2.expression.BinaryOperation$OpType.MULTIPLY:Lorg/h2/expression/BinaryOperation$OpType;
        43: .line 356
            ldc 86400
            invokestatic org.h2.value.ValueInt.get:(I)Lorg/h2/value/ValueInt;
        44: .line 355
            invokestatic org.h2.expression.ValueExpression.get:(Lorg/h2/value/Value;)Lorg/h2/expression/ValueExpression;
        45: .line 356
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.BinaryOperation.<init>:(Lorg/h2/expression/BinaryOperation$OpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
        46: .line 355
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
        47: .line 357
            aload 0 /* this */
            new org.h2.expression.UnaryOperation
            dup
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.UnaryOperation.<init>:(Lorg/h2/expression/Expression;)V
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
        48: .line 358
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* session */
            invokevirtual org.h2.expression.Expression.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
        49: .line 359
            aload 4 /* f */
            iconst_1
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        50: .line 360
            aload 4 /* f */
            iconst_2
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.function.Function.setParameter:(ILorg/h2/expression/Expression;)V
        51: .line 361
            aload 4 /* f */
            invokevirtual org.h2.expression.function.Function.doneWithParameters:()V
        52: .line 362
            aload 4 /* f */
            aload 1 /* session */
            invokevirtual org.h2.expression.function.Function.optimize:(Lorg/h2/engine/Session;)Lorg/h2/expression/Expression;
            areturn
        end local 4 // org.h2.expression.function.Function f
        53: .line 365
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_TIMESTAMP:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        54: .line 366
            aload 0 /* this */
            areturn
        55: .line 370
      StackMap locals:
      StackMap stack:
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.DATETIME_MINUS_DATETIME:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        56: .line 372
      StackMap locals:
      StackMap stack:
            goto 73
        57: .line 374
      StackMap locals:
      StackMap stack:
            iload 3 /* r */
            bipush 9
            if_icmpne 73
        58: .line 375
            new org.h2.expression.IntervalOperation
            dup
            getstatic org.h2.expression.IntervalOperation$IntervalOpType.DATETIME_MINUS_DATETIME:Lorg/h2/expression/IntervalOperation$IntervalOpType;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokespecial org.h2.expression.IntervalOperation.<init>:(Lorg/h2/expression/IntervalOperation$IntervalOpType;Lorg/h2/expression/Expression;Lorg/h2/expression/Expression;)V
            areturn
        59: .line 379
      StackMap locals:
      StackMap stack:
            goto 73
        60: .line 381
      StackMap locals:
      StackMap stack:
            iload 2 /* l */
            bipush 9
            if_icmpne 64
        61: .line 382
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_TIME:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        62: .line 383
            aload 0 /* this */
            iconst_0
            putfield org.h2.expression.BinaryOperation.convertRight:Z
        63: .line 384
            aload 0 /* this */
            areturn
        64: .line 385
      StackMap locals:
      StackMap stack:
            iload 3 /* r */
            bipush 9
            if_icmpne 73
        65: .line 386
            aload 0 /* this */
            invokevirtual org.h2.expression.BinaryOperation.swap:()V
        66: .line 387
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_TIME:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        67: .line 388
            aload 0 /* this */
            iconst_0
            putfield org.h2.expression.BinaryOperation.convertRight:Z
        68: .line 389
            aload 0 /* this */
            areturn
        69: .line 393
      StackMap locals:
      StackMap stack:
            iload 2 /* l */
            bipush 9
            if_icmpne 73
        70: .line 394
            aload 0 /* this */
            getstatic org.h2.value.TypeInfo.TYPE_TIME:Lorg/h2/value/TypeInfo;
            putfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
        71: .line 395
            aload 0 /* this */
            iconst_0
            putfield org.h2.expression.BinaryOperation.convertRight:Z
        72: .line 396
            aload 0 /* this */
            areturn
        73: .line 401
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iload 2 /* l */
            iload 3 /* r */
            invokevirtual org.h2.expression.BinaryOperation.getUnsupported:(II)Lorg/h2/message/DbException;
            athrow
        end local 3 // int r
        end local 2 // int l
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   74     0     this  Lorg/h2/expression/BinaryOperation;
            0   74     1  session  Lorg/h2/engine/Session;
            0   74     2        l  I
            0   74     3        r  I
            4    6     4        t  I
            8   13     4        f  Lorg/h2/expression/function/Function;
           14   24     4        f  Lorg/h2/expression/function/Function;
           33   40     4        f  Lorg/h2/expression/function/Function;
           41   53     4        f  Lorg/h2/expression/function/Function;
    MethodParameters:
         Name  Flags
      session  
      l        
      r        

  private org.h2.message.DbException getUnsupported(int, int);
    descriptor: (II)Lorg/h2/message/DbException;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // int l
        start local 2 // int r
         0: .line 406
            new java.lang.StringBuilder
            dup
            iload 1 /* l */
            invokestatic org.h2.value.DataType.getDataType:(I)Lorg/h2/value/DataType;
            getfield org.h2.value.DataType.name:Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 32
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 0 /* this */
            invokevirtual org.h2.expression.BinaryOperation.getOperationToken:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            bipush 32
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            iload 2 /* r */
            invokestatic org.h2.value.DataType.getDataType:(I)Lorg/h2/value/DataType;
            getfield org.h2.value.DataType.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
         1: .line 405
            invokestatic org.h2.message.DbException.getUnsupportedException:(Ljava/lang/String;)Lorg/h2/message/DbException;
            areturn
        end local 2 // int r
        end local 1 // int l
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/h2/expression/BinaryOperation;
            0    2     1     l  I
            0    2     2     r  I
    MethodParameters:
      Name  Flags
      l     
      r     

  private void swap();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.h2.expression.BinaryOperation this
         0: .line 410
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            astore 1 /* temp */
        start local 1 // org.h2.expression.Expression temp
         1: .line 411
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            putfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
         2: .line 412
            aload 0 /* this */
            aload 1 /* temp */
            putfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
         3: .line 413
            return
        end local 1 // org.h2.expression.Expression temp
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/h2/expression/BinaryOperation;
            1    4     1  temp  Lorg/h2/expression/Expression;

  public void setEvaluatable(org.h2.table.TableFilter, boolean);
    descriptor: (Lorg/h2/table/TableFilter;Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.table.TableFilter tableFilter
        start local 2 // boolean b
         0: .line 417
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* tableFilter */
            iload 2 /* b */
            invokevirtual org.h2.expression.Expression.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
         1: .line 418
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* tableFilter */
            iload 2 /* b */
            invokevirtual org.h2.expression.Expression.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
         2: .line 419
            return
        end local 2 // boolean b
        end local 1 // org.h2.table.TableFilter tableFilter
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    3     0         this  Lorg/h2/expression/BinaryOperation;
            0    3     1  tableFilter  Lorg/h2/table/TableFilter;
            0    3     2            b  Z
    MethodParameters:
             Name  Flags
      tableFilter  
      b            

  public org.h2.value.TypeInfo getType();
    descriptor: ()Lorg/h2/value/TypeInfo;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.expression.BinaryOperation this
         0: .line 423
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.type:Lorg/h2/value/TypeInfo;
            areturn
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/expression/BinaryOperation;

  public void updateAggregate(org.h2.engine.Session, int);
    descriptor: (Lorg/h2/engine/Session;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.engine.Session session
        start local 2 // int stage
         0: .line 428
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* session */
            iload 2 /* stage */
            invokevirtual org.h2.expression.Expression.updateAggregate:(Lorg/h2/engine/Session;I)V
         1: .line 429
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* session */
            iload 2 /* stage */
            invokevirtual org.h2.expression.Expression.updateAggregate:(Lorg/h2/engine/Session;I)V
         2: .line 430
            return
        end local 2 // int stage
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/h2/expression/BinaryOperation;
            0    3     1  session  Lorg/h2/engine/Session;
            0    3     2    stage  I
    MethodParameters:
         Name  Flags
      session  
      stage    

  public boolean isEverything(org.h2.expression.ExpressionVisitor);
    descriptor: (Lorg/h2/expression/ExpressionVisitor;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // org.h2.expression.ExpressionVisitor visitor
         0: .line 434
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            aload 1 /* visitor */
            invokevirtual org.h2.expression.Expression.isEverything:(Lorg/h2/expression/ExpressionVisitor;)Z
            ifeq 1
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            aload 1 /* visitor */
            invokevirtual org.h2.expression.Expression.isEverything:(Lorg/h2/expression/ExpressionVisitor;)Z
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 1 // org.h2.expression.ExpressionVisitor visitor
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/h2/expression/BinaryOperation;
            0    2     1  visitor  Lorg/h2/expression/ExpressionVisitor;
    MethodParameters:
         Name  Flags
      visitor  

  public int getCost();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.h2.expression.BinaryOperation this
         0: .line 439
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.getCost:()I
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            invokevirtual org.h2.expression.Expression.getCost:()I
            iadd
            iconst_1
            iadd
            ireturn
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/expression/BinaryOperation;

  public int getSubexpressionCount();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.expression.BinaryOperation this
         0: .line 444
            iconst_2
            ireturn
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/expression/BinaryOperation;

  public org.h2.expression.Expression getSubexpression(int);
    descriptor: (I)Lorg/h2/expression/Expression;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.expression.BinaryOperation this
        start local 1 // int index
         0: .line 449
            iload 1 /* index */
            tableswitch { // 0 - 1
                    0: 1
                    1: 2
              default: 3
          }
         1: .line 451
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.left:Lorg/h2/expression/Expression;
            areturn
         2: .line 453
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.expression.BinaryOperation.right:Lorg/h2/expression/Expression;
            areturn
         3: .line 455
      StackMap locals:
      StackMap stack:
            new java.lang.IndexOutOfBoundsException
            dup
            invokespecial java.lang.IndexOutOfBoundsException.<init>:()V
            athrow
        end local 1 // int index
        end local 0 // org.h2.expression.BinaryOperation this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    4     0   this  Lorg/h2/expression/BinaryOperation;
            0    4     1  index  I
    MethodParameters:
       Name  Flags
      index  

  static int[] $SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType();
    descriptor: ()[I
    flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=3, locals=1, args_size=0
         0: .line 25
            getstatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:[I
            dup
            ifnull 1
            areturn
      StackMap locals:
      StackMap stack: int[]
         1: pop
            invokestatic org.h2.expression.BinaryOperation$OpType.values:()[Lorg/h2/expression/BinaryOperation$OpType;
            arraylength
            newarray 10
            astore 0
         2: aload 0
            getstatic org.h2.expression.BinaryOperation$OpType.CONCAT:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iconst_1
            iastore
         3: goto 5
      StackMap locals: int[]
      StackMap stack: java.lang.NoSuchFieldError
         4: pop
      StackMap locals:
      StackMap stack:
         5: aload 0
            getstatic org.h2.expression.BinaryOperation$OpType.DIVIDE:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iconst_5
            iastore
         6: goto 8
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
         7: pop
      StackMap locals:
      StackMap stack:
         8: aload 0
            getstatic org.h2.expression.BinaryOperation$OpType.MINUS:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iconst_3
            iastore
         9: goto 11
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        10: pop
      StackMap locals:
      StackMap stack:
        11: aload 0
            getstatic org.h2.expression.BinaryOperation$OpType.MODULUS:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            bipush 6
            iastore
        12: goto 14
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        13: pop
      StackMap locals:
      StackMap stack:
        14: aload 0
            getstatic org.h2.expression.BinaryOperation$OpType.MULTIPLY:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iconst_4
            iastore
        15: goto 17
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        16: pop
      StackMap locals:
      StackMap stack:
        17: aload 0
            getstatic org.h2.expression.BinaryOperation$OpType.PLUS:Lorg/h2/expression/BinaryOperation$OpType;
            invokevirtual org.h2.expression.BinaryOperation$OpType.ordinal:()I
            iconst_2
            iastore
        18: goto 20
      StackMap locals:
      StackMap stack: java.lang.NoSuchFieldError
        19: pop
      StackMap locals:
      StackMap stack:
        20: aload 0
            dup
            putstatic org.h2.expression.BinaryOperation.$SWITCH_TABLE$org$h2$expression$BinaryOperation$OpType:[I
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.NoSuchFieldError
           5     6       7  Class java.lang.NoSuchFieldError
           8     9      10  Class java.lang.NoSuchFieldError
          11    12      13  Class java.lang.NoSuchFieldError
          14    15      16  Class java.lang.NoSuchFieldError
          17    18      19  Class java.lang.NoSuchFieldError
}
SourceFile: "BinaryOperation.java"
NestMembers:
  org.h2.expression.BinaryOperation$OpType
InnerClasses:
  public final OpType = org.h2.expression.BinaryOperation$OpType of org.h2.expression.BinaryOperation
  public final IntervalOpType = org.h2.expression.IntervalOperation$IntervalOpType of org.h2.expression.IntervalOperation