public class org.h2.index.TreeIndex extends org.h2.index.BaseIndex
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.h2.index.TreeIndex
  super_class: org.h2.index.BaseIndex
{
  private org.h2.index.TreeNode root;
    descriptor: Lorg/h2/index/TreeNode;
    flags: (0x0002) ACC_PRIVATE

  private final org.h2.table.PageStoreTable tableData;
    descriptor: Lorg/h2/table/PageStoreTable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private long rowCount;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

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

  public void <init>(org.h2.table.PageStoreTable, int, java.lang.String, org.h2.table.IndexColumn[], org.h2.index.IndexType);
    descriptor: (Lorg/h2/table/PageStoreTable;ILjava/lang/String;[Lorg/h2/table/IndexColumn;Lorg/h2/index/IndexType;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=6
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.table.PageStoreTable table
        start local 2 // int id
        start local 3 // java.lang.String indexName
        start local 4 // org.h2.table.IndexColumn[] columns
        start local 5 // org.h2.index.IndexType indexType
         0: .line 32
            aload 0 /* this */
            aload 1 /* table */
            iload 2 /* id */
            aload 3 /* indexName */
            aload 4 /* columns */
            aload 5 /* indexType */
            invokespecial org.h2.index.BaseIndex.<init>:(Lorg/h2/table/Table;ILjava/lang/String;[Lorg/h2/table/IndexColumn;Lorg/h2/index/IndexType;)V
         1: .line 33
            aload 0 /* this */
            aload 1 /* table */
            putfield org.h2.index.TreeIndex.tableData:Lorg/h2/table/PageStoreTable;
         2: .line 34
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.database:Lorg/h2/engine/Database;
            invokevirtual org.h2.engine.Database.isStarting:()Z
            ifne 4
         3: .line 35
            aload 4 /* columns */
            invokestatic org.h2.index.TreeIndex.checkIndexColumnTypes:([Lorg/h2/table/IndexColumn;)V
         4: .line 37
      StackMap locals: org.h2.index.TreeIndex org.h2.table.PageStoreTable int java.lang.String org.h2.table.IndexColumn[] org.h2.index.IndexType
      StackMap stack:
            return
        end local 5 // org.h2.index.IndexType indexType
        end local 4 // org.h2.table.IndexColumn[] columns
        end local 3 // java.lang.String indexName
        end local 2 // int id
        end local 1 // org.h2.table.PageStoreTable table
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lorg/h2/index/TreeIndex;
            0    5     1      table  Lorg/h2/table/PageStoreTable;
            0    5     2         id  I
            0    5     3  indexName  Ljava/lang/String;
            0    5     4    columns  [Lorg/h2/table/IndexColumn;
            0    5     5  indexType  Lorg/h2/index/IndexType;
    MethodParameters:
           Name  Flags
      table      
      id         
      indexName  
      columns    
      indexType  

  public void close(org.h2.engine.Session);
    descriptor: (Lorg/h2/engine/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
         0: .line 41
            aload 0 /* this */
            aconst_null
            putfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
         1: .line 42
            aload 0 /* this */
            iconst_1
            putfield org.h2.index.TreeIndex.closed:Z
         2: .line 43
            return
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/h2/index/TreeIndex;
            0    3     1  session  Lorg/h2/engine/Session;
    MethodParameters:
         Name  Flags
      session  

  public void add(org.h2.engine.Session, org.h2.result.Row);
    descriptor: (Lorg/h2/engine/Session;Lorg/h2/result/Row;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=9, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
        start local 2 // org.h2.result.Row row
         0: .line 47
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.closed:Z
            ifeq 2
         1: .line 48
            invokestatic org.h2.message.DbException.throwInternalError:()Ljava/lang/RuntimeException;
            athrow
         2: .line 50
      StackMap locals:
      StackMap stack:
            new org.h2.index.TreeNode
            dup
            aload 2 /* row */
            invokespecial org.h2.index.TreeNode.<init>:(Lorg/h2/result/Row;)V
            astore 3 /* i */
        start local 3 // org.h2.index.TreeNode i
         3: .line 51
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        start local 4 // org.h2.index.TreeNode n
         4: aload 4 /* n */
            astore 5 /* x */
        start local 5 // org.h2.index.TreeNode x
         5: .line 52
            iconst_1
            istore 6 /* isLeft */
        start local 6 // boolean isLeft
         6: .line 54
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode org.h2.index.TreeNode int
      StackMap stack:
            aload 4 /* n */
            ifnonnull 13
         7: .line 55
            aload 5 /* x */
            ifnonnull 11
         8: .line 56
            aload 0 /* this */
            aload 3 /* i */
            putfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
         9: .line 57
            aload 0 /* this */
            dup
            getfield org.h2.index.TreeIndex.rowCount:J
            lconst_1
            ladd
            putfield org.h2.index.TreeIndex.rowCount:J
        10: .line 58
            return
        11: .line 60
      StackMap locals:
      StackMap stack:
            aload 5 /* x */
            iload 6 /* isLeft */
            aload 3 /* i */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        12: .line 61
            goto 26
        13: .line 63
      StackMap locals:
      StackMap stack:
            aload 4 /* n */
            getfield org.h2.index.TreeNode.row:Lorg/h2/result/Row;
            astore 7 /* r */
        start local 7 // org.h2.result.Row r
        14: .line 64
            aload 0 /* this */
            aload 2 /* row */
            aload 7 /* r */
            invokevirtual org.h2.index.TreeIndex.compareRows:(Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)I
            istore 8 /* compare */
        start local 8 // int compare
        15: .line 65
            iload 8 /* compare */
            ifne 20
        16: .line 66
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.indexType:Lorg/h2/index/IndexType;
            invokevirtual org.h2.index.IndexType.isUnique:()Z
            ifeq 19
        17: .line 67
            aload 0 /* this */
            aload 2 /* row */
            invokevirtual org.h2.index.TreeIndex.mayHaveNullDuplicates:(Lorg/h2/result/SearchRow;)Z
            ifne 19
        18: .line 68
            aload 0 /* this */
            aload 2 /* row */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokevirtual org.h2.index.TreeIndex.getDuplicateKeyException:(Ljava/lang/String;)Lorg/h2/message/DbException;
            athrow
        19: .line 71
      StackMap locals: org.h2.result.Row int
      StackMap stack:
            aload 0 /* this */
            aload 2 /* row */
            aload 7 /* r */
            invokevirtual org.h2.index.TreeIndex.compareKeys:(Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)I
            istore 8 /* compare */
        20: .line 73
      StackMap locals:
      StackMap stack:
            iload 8 /* compare */
            ifge 21
            iconst_1
            goto 22
      StackMap locals:
      StackMap stack:
        21: iconst_0
      StackMap locals:
      StackMap stack: int
        22: istore 6 /* isLeft */
        23: .line 74
            aload 4 /* n */
            astore 5 /* x */
        24: .line 75
            aload 5 /* x */
            iload 6 /* isLeft */
            invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            astore 4 /* n */
        end local 8 // int compare
        end local 7 // org.h2.result.Row r
        25: .line 53
            goto 6
        26: .line 77
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 5 /* x */
            iload 6 /* isLeft */
            invokevirtual org.h2.index.TreeIndex.balance:(Lorg/h2/index/TreeNode;Z)V
        27: .line 78
            aload 0 /* this */
            dup
            getfield org.h2.index.TreeIndex.rowCount:J
            lconst_1
            ladd
            putfield org.h2.index.TreeIndex.rowCount:J
        28: .line 79
            return
        end local 6 // boolean isLeft
        end local 5 // org.h2.index.TreeNode x
        end local 4 // org.h2.index.TreeNode n
        end local 3 // org.h2.index.TreeNode i
        end local 2 // org.h2.result.Row row
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   29     0     this  Lorg/h2/index/TreeIndex;
            0   29     1  session  Lorg/h2/engine/Session;
            0   29     2      row  Lorg/h2/result/Row;
            3   29     3        i  Lorg/h2/index/TreeNode;
            4   29     4        n  Lorg/h2/index/TreeNode;
            5   29     5        x  Lorg/h2/index/TreeNode;
            6   29     6   isLeft  Z
           14   25     7        r  Lorg/h2/result/Row;
           15   25     8  compare  I
    MethodParameters:
         Name  Flags
      session  
      row      

  private void balance(org.h2.index.TreeNode, boolean);
    descriptor: (Lorg/h2/index/TreeNode;Z)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=7, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.index.TreeNode x
        start local 2 // boolean isLeft
         0: .line 83
      StackMap locals:
      StackMap stack:
            iload 2 /* isLeft */
            ifeq 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_m1
      StackMap locals:
      StackMap stack: int
         2: istore 3 /* sign */
        start local 3 // int sign
         3: .line 84
            aload 1 /* x */
            getfield org.h2.index.TreeNode.balance:I
            iload 3 /* sign */
            imul
            tableswitch { // -1 - 1
                   -1: 8
                    0: 6
                    1: 4
              default: 43
          }
         4: .line 86
      StackMap locals: int
      StackMap stack:
            aload 1 /* x */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
         5: .line 87
            return
         6: .line 89
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            iload 3 /* sign */
            ineg
            putfield org.h2.index.TreeNode.balance:I
         7: .line 90
            goto 44
         8: .line 92
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            iload 2 /* isLeft */
            invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            astore 4 /* l */
        start local 4 // org.h2.index.TreeNode l
         9: .line 93
            aload 4 /* l */
            getfield org.h2.index.TreeNode.balance:I
            iload 3 /* sign */
            ineg
            if_icmpne 20
        10: .line 94
            aload 0 /* this */
            aload 1 /* x */
            aload 4 /* l */
            invokevirtual org.h2.index.TreeIndex.replace:(Lorg/h2/index/TreeNode;Lorg/h2/index/TreeNode;)V
        11: .line 95
            aload 1 /* x */
            iload 2 /* isLeft */
            aload 4 /* l */
            iload 2 /* isLeft */
            ifeq 12
            iconst_0
            goto 13
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int org.h2.index.TreeNode
        12: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int org.h2.index.TreeNode int
        13: invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        14: .line 96
            aload 4 /* l */
            iload 2 /* isLeft */
            ifeq 15
            iconst_0
            goto 16
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        15: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
        16: aload 1 /* x */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        17: .line 97
            aload 1 /* x */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
        18: .line 98
            aload 4 /* l */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
        19: .line 99
            goto 42
        20: .line 100
      StackMap locals:
      StackMap stack:
            aload 4 /* l */
            iload 2 /* isLeft */
            ifeq 21
            iconst_0
            goto 22
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        21: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
        22: invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            astore 5 /* r */
        start local 5 // org.h2.index.TreeNode r
        23: .line 101
            aload 0 /* this */
            aload 1 /* x */
            aload 5 /* r */
            invokevirtual org.h2.index.TreeIndex.replace:(Lorg/h2/index/TreeNode;Lorg/h2/index/TreeNode;)V
        24: .line 102
            aload 4 /* l */
            iload 2 /* isLeft */
            ifeq 25
            iconst_0
            goto 26
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode
        25: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
        26: aload 5 /* r */
            iload 2 /* isLeft */
            invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        27: .line 103
            aload 5 /* r */
            iload 2 /* isLeft */
            aload 4 /* l */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        28: .line 104
            aload 1 /* x */
            iload 2 /* isLeft */
            aload 5 /* r */
            iload 2 /* isLeft */
            ifeq 29
            iconst_0
            goto 30
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int org.h2.index.TreeNode
        29: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int org.h2.index.TreeNode int
        30: invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        31: .line 105
            aload 5 /* r */
            iload 2 /* isLeft */
            ifeq 32
            iconst_0
            goto 33
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        32: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
        33: aload 1 /* x */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        34: .line 106
            aload 5 /* r */
            getfield org.h2.index.TreeNode.balance:I
            istore 6 /* rb */
        start local 6 // int rb
        35: .line 107
            aload 1 /* x */
            iload 6 /* rb */
            iload 3 /* sign */
            ineg
            if_icmpne 36
            iload 3 /* sign */
            goto 37
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode int
      StackMap stack: org.h2.index.TreeNode
        36: iconst_0
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode int
      StackMap stack: org.h2.index.TreeNode int
        37: putfield org.h2.index.TreeNode.balance:I
        38: .line 108
            aload 4 /* l */
            iload 6 /* rb */
            iload 3 /* sign */
            if_icmpne 39
            iload 3 /* sign */
            ineg
            goto 40
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        39: iconst_0
      StackMap locals: org.h2.index.TreeIndex org.h2.index.TreeNode int int org.h2.index.TreeNode org.h2.index.TreeNode int
      StackMap stack: org.h2.index.TreeNode int
        40: putfield org.h2.index.TreeNode.balance:I
        41: .line 109
            aload 5 /* r */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
        end local 6 // int rb
        end local 5 // org.h2.index.TreeNode r
        42: .line 111
      StackMap locals:
      StackMap stack:
            return
        end local 4 // org.h2.index.TreeNode l
        43: .line 113
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "b:"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* x */
            getfield org.h2.index.TreeNode.balance:I
            iload 3 /* sign */
            imul
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
        44: .line 115
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            if_acmpne 46
        45: .line 116
            return
        46: .line 118
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            invokevirtual org.h2.index.TreeNode.isFromLeft:()Z
            istore 2 /* isLeft */
        47: .line 119
            aload 1 /* x */
            getfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
            astore 1 /* x */
        end local 3 // int sign
        48: .line 82
            goto 0
        end local 2 // boolean isLeft
        end local 1 // org.h2.index.TreeNode x
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   49     0    this  Lorg/h2/index/TreeIndex;
            0   49     1       x  Lorg/h2/index/TreeNode;
            0   49     2  isLeft  Z
            3   48     3    sign  I
            9   43     4       l  Lorg/h2/index/TreeNode;
           23   42     5       r  Lorg/h2/index/TreeNode;
           35   42     6      rb  I
    MethodParameters:
        Name  Flags
      x       
      isLeft  

  private static org.h2.index.TreeNode child(org.h2.index.TreeNode, boolean);
    descriptor: (Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.h2.index.TreeNode x
        start local 1 // boolean isLeft
         0: .line 124
            iload 1 /* isLeft */
            ifeq 1
            aload 0 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            goto 2
      StackMap locals:
      StackMap stack:
         1: aload 0 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
         2: areturn
        end local 1 // boolean isLeft
        end local 0 // org.h2.index.TreeNode x
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0       x  Lorg/h2/index/TreeNode;
            0    3     1  isLeft  Z
    MethodParameters:
        Name  Flags
      x       
      isLeft  

  private void replace(org.h2.index.TreeNode, org.h2.index.TreeNode);
    descriptor: (Lorg/h2/index/TreeNode;Lorg/h2/index/TreeNode;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.index.TreeNode x
        start local 2 // org.h2.index.TreeNode n
         0: .line 128
            aload 1 /* x */
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            if_acmpne 5
         1: .line 129
            aload 0 /* this */
            aload 2 /* n */
            putfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
         2: .line 130
            aload 2 /* n */
            ifnull 6
         3: .line 131
            aload 2 /* n */
            aconst_null
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
         4: .line 133
            goto 6
         5: .line 134
      StackMap locals:
      StackMap stack:
            aload 1 /* x */
            getfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
            aload 1 /* x */
            invokevirtual org.h2.index.TreeNode.isFromLeft:()Z
            aload 2 /* n */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
         6: .line 136
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.h2.index.TreeNode n
        end local 1 // org.h2.index.TreeNode x
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/h2/index/TreeIndex;
            0    7     1     x  Lorg/h2/index/TreeNode;
            0    7     2     n  Lorg/h2/index/TreeNode;
    MethodParameters:
      Name  Flags
      x     
      n     

  private static void set(org.h2.index.TreeNode, boolean, org.h2.index.TreeNode);
    descriptor: (Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // org.h2.index.TreeNode parent
        start local 1 // boolean left
        start local 2 // org.h2.index.TreeNode n
         0: .line 139
            iload 1 /* left */
            ifeq 3
         1: .line 140
            aload 0 /* parent */
            aload 2 /* n */
            putfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
         2: .line 141
            goto 4
         3: .line 142
      StackMap locals:
      StackMap stack:
            aload 0 /* parent */
            aload 2 /* n */
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
         4: .line 144
      StackMap locals:
      StackMap stack:
            aload 2 /* n */
            ifnull 6
         5: .line 145
            aload 2 /* n */
            aload 0 /* parent */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
         6: .line 147
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.h2.index.TreeNode n
        end local 1 // boolean left
        end local 0 // org.h2.index.TreeNode parent
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0  parent  Lorg/h2/index/TreeNode;
            0    7     1    left  Z
            0    7     2       n  Lorg/h2/index/TreeNode;
    MethodParameters:
        Name  Flags
      parent  
      left    
      n       

  public void remove(org.h2.engine.Session, org.h2.result.Row);
    descriptor: (Lorg/h2/engine/Session;Lorg/h2/result/Row;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=10, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
        start local 2 // org.h2.result.Row row
         0: .line 151
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.closed:Z
            ifeq 2
         1: .line 152
            invokestatic org.h2.message.DbException.throwInternalError:()Ljava/lang/RuntimeException;
            athrow
         2: .line 154
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* row */
            iconst_1
            invokevirtual org.h2.index.TreeIndex.findFirstNode:(Lorg/h2/result/SearchRow;Z)Lorg/h2/index/TreeNode;
            astore 3 /* x */
        start local 3 // org.h2.index.TreeNode x
         3: .line 155
            aload 3 /* x */
            ifnonnull 5
         4: .line 156
            ldc "not found!"
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
         5: .line 159
      StackMap locals: org.h2.index.TreeNode
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            ifnonnull 8
         6: .line 160
            aload 3 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        start local 4 // org.h2.index.TreeNode n
         7: .line 161
            goto 53
        end local 4 // org.h2.index.TreeNode n
      StackMap locals:
      StackMap stack:
         8: aload 3 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            ifnonnull 11
         9: .line 162
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        start local 4 // org.h2.index.TreeNode n
        10: .line 163
            goto 53
        end local 4 // org.h2.index.TreeNode n
        11: .line 164
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            astore 5 /* d */
        start local 5 // org.h2.index.TreeNode d
        12: .line 165
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        13: .line 166
            aload 3 /* x */
            astore 6 /* temp */
        start local 6 // org.h2.index.TreeNode temp
        14: goto 16
        15: .line 167
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode top org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack:
            aload 6 /* temp */
            astore 3 /* x */
        16: .line 166
      StackMap locals:
      StackMap stack:
            aload 6 /* temp */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            dup
            astore 6 /* temp */
            ifnonnull 15
        end local 6 // org.h2.index.TreeNode temp
        17: .line 170
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        start local 4 // org.h2.index.TreeNode n
        18: .line 172
            aload 3 /* x */
            getfield org.h2.index.TreeNode.balance:I
            istore 6 /* b */
        start local 6 // int b
        19: .line 173
            aload 3 /* x */
            aload 5 /* d */
            getfield org.h2.index.TreeNode.balance:I
            putfield org.h2.index.TreeNode.balance:I
        20: .line 174
            aload 5 /* d */
            iload 6 /* b */
            putfield org.h2.index.TreeNode.balance:I
        21: .line 177
            aload 3 /* x */
            getfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
            astore 7 /* xp */
        start local 7 // org.h2.index.TreeNode xp
        22: .line 178
            aload 5 /* d */
            getfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
            astore 8 /* dp */
        start local 8 // org.h2.index.TreeNode dp
        23: .line 179
            aload 5 /* d */
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            if_acmpne 25
        24: .line 180
            aload 0 /* this */
            aload 3 /* x */
            putfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
        25: .line 182
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode org.h2.index.TreeNode int org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack:
            aload 3 /* x */
            aload 8 /* dp */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
        26: .line 183
            aload 8 /* dp */
            ifnull 31
        27: .line 184
            aload 8 /* dp */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            aload 5 /* d */
            if_acmpne 30
        28: .line 185
            aload 8 /* dp */
            aload 3 /* x */
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
        29: .line 186
            goto 31
        30: .line 187
      StackMap locals:
      StackMap stack:
            aload 8 /* dp */
            aload 3 /* x */
            putfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
        31: .line 191
      StackMap locals:
      StackMap stack:
            aload 7 /* xp */
            aload 5 /* d */
            if_acmpne 40
        32: .line 192
            aload 5 /* d */
            aload 3 /* x */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
        33: .line 193
            aload 5 /* d */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            aload 3 /* x */
            if_acmpne 37
        34: .line 194
            aload 3 /* x */
            aload 5 /* d */
            putfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
        35: .line 195
            aload 3 /* x */
            aload 5 /* d */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
        36: .line 196
            goto 44
        37: .line 197
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            aload 5 /* d */
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
        38: .line 198
            aload 3 /* x */
            aload 5 /* d */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            putfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
        39: .line 200
            goto 44
        40: .line 201
      StackMap locals:
      StackMap stack:
            aload 5 /* d */
            aload 7 /* xp */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
        41: .line 202
            aload 7 /* xp */
            aload 5 /* d */
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
        42: .line 203
            aload 3 /* x */
            aload 5 /* d */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
        43: .line 204
            aload 3 /* x */
            aload 5 /* d */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            putfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
        44: .line 207
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            ifnonnull 46
        45: .line 208
            ldc "tree corrupted"
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
        46: .line 210
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            aload 3 /* x */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
        47: .line 211
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            aload 3 /* x */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
        48: .line 213
            aload 5 /* d */
            aload 4 /* n */
            putfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
        49: .line 214
            aload 4 /* n */
            ifnull 51
        50: .line 215
            aload 4 /* n */
            aload 5 /* d */
            putfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
        51: .line 217
      StackMap locals:
      StackMap stack:
            aload 5 /* d */
            aconst_null
            putfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
        52: .line 218
            aload 5 /* d */
            astore 3 /* x */
        end local 8 // org.h2.index.TreeNode dp
        end local 7 // org.h2.index.TreeNode xp
        end local 6 // int b
        end local 5 // org.h2.index.TreeNode d
        53: .line 220
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack:
            aload 0 /* this */
            dup
            getfield org.h2.index.TreeIndex.rowCount:J
            lconst_1
            lsub
            putfield org.h2.index.TreeIndex.rowCount:J
        54: .line 222
            aload 3 /* x */
            invokevirtual org.h2.index.TreeNode.isFromLeft:()Z
            istore 5 /* isLeft */
        start local 5 // boolean isLeft
        55: .line 223
            aload 0 /* this */
            aload 3 /* x */
            aload 4 /* n */
            invokevirtual org.h2.index.TreeIndex.replace:(Lorg/h2/index/TreeNode;Lorg/h2/index/TreeNode;)V
        56: .line 224
            aload 3 /* x */
            getfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        57: .line 225
            goto 110
        58: .line 226
      StackMap locals: int
      StackMap stack:
            aload 4 /* n */
            astore 3 /* x */
        59: .line 227
            iload 5 /* isLeft */
            ifeq 60
            iconst_1
            goto 61
      StackMap locals:
      StackMap stack:
        60: iconst_m1
      StackMap locals:
      StackMap stack: int
        61: istore 6 /* sign */
        start local 6 // int sign
        62: .line 228
            aload 3 /* x */
            getfield org.h2.index.TreeNode.balance:I
            iload 6 /* sign */
            imul
            tableswitch { // -1 - 1
                   -1: 63
                    0: 65
                    1: 67
              default: 107
          }
        63: .line 230
      StackMap locals: int
      StackMap stack:
            aload 3 /* x */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
        64: .line 231
            goto 108
        65: .line 233
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            iload 6 /* sign */
            putfield org.h2.index.TreeNode.balance:I
        66: .line 234
            return
        67: .line 236
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            iload 5 /* isLeft */
            ifeq 68
            iconst_0
            goto 69
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        68: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int
      StackMap stack: org.h2.index.TreeNode int
        69: invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            astore 7 /* r */
        start local 7 // org.h2.index.TreeNode r
        70: .line 237
            aload 7 /* r */
            getfield org.h2.index.TreeNode.balance:I
            istore 8 /* b */
        start local 8 // int b
        71: .line 238
            iload 8 /* b */
            iload 6 /* sign */
            imul
            iflt 85
        72: .line 239
            aload 0 /* this */
            aload 3 /* x */
            aload 7 /* r */
            invokevirtual org.h2.index.TreeIndex.replace:(Lorg/h2/index/TreeNode;Lorg/h2/index/TreeNode;)V
        73: .line 240
            aload 3 /* x */
            iload 5 /* isLeft */
            ifeq 74
            iconst_0
            goto 75
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int
      StackMap stack: org.h2.index.TreeNode
        74: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int
      StackMap stack: org.h2.index.TreeNode int
        75: aload 7 /* r */
            iload 5 /* isLeft */
            invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        76: .line 241
            aload 7 /* r */
            iload 5 /* isLeft */
            aload 3 /* x */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        77: .line 242
            iload 8 /* b */
            ifne 81
        78: .line 243
            aload 3 /* x */
            iload 6 /* sign */
            putfield org.h2.index.TreeNode.balance:I
        79: .line 244
            aload 7 /* r */
            iload 6 /* sign */
            ineg
            putfield org.h2.index.TreeNode.balance:I
        80: .line 245
            return
        81: .line 247
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
        82: .line 248
            aload 7 /* r */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
        83: .line 249
            aload 7 /* r */
            astore 3 /* x */
        84: .line 250
            goto 108
        85: .line 251
      StackMap locals:
      StackMap stack:
            aload 7 /* r */
            iload 5 /* isLeft */
            invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            astore 9 /* l */
        start local 9 // org.h2.index.TreeNode l
        86: .line 252
            aload 0 /* this */
            aload 3 /* x */
            aload 9 /* l */
            invokevirtual org.h2.index.TreeIndex.replace:(Lorg/h2/index/TreeNode;Lorg/h2/index/TreeNode;)V
        87: .line 253
            aload 9 /* l */
            getfield org.h2.index.TreeNode.balance:I
            istore 8 /* b */
        88: .line 254
            aload 7 /* r */
            iload 5 /* isLeft */
            aload 9 /* l */
            iload 5 /* isLeft */
            ifeq 89
            iconst_0
            goto 90
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int org.h2.index.TreeNode
        89: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int org.h2.index.TreeNode int
        90: invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        91: .line 255
            aload 9 /* l */
            iload 5 /* isLeft */
            ifeq 92
            iconst_0
            goto 93
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        92: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
        93: aload 7 /* r */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        94: .line 256
            aload 3 /* x */
            iload 5 /* isLeft */
            ifeq 95
            iconst_0
            goto 96
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        95: iconst_1
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
        96: aload 9 /* l */
            iload 5 /* isLeft */
            invokestatic org.h2.index.TreeIndex.child:(Lorg/h2/index/TreeNode;Z)Lorg/h2/index/TreeNode;
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        97: .line 257
            aload 9 /* l */
            iload 5 /* isLeft */
            aload 3 /* x */
            invokestatic org.h2.index.TreeIndex.set:(Lorg/h2/index/TreeNode;ZLorg/h2/index/TreeNode;)V
        98: .line 258
            aload 3 /* x */
            iload 8 /* b */
            iload 6 /* sign */
            if_icmpne 99
            iload 6 /* sign */
            ineg
            goto 100
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
        99: iconst_0
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
       100: putfield org.h2.index.TreeNode.balance:I
       101: .line 259
            aload 7 /* r */
            iload 8 /* b */
            iload 6 /* sign */
            ineg
            if_icmpne 102
            iload 6 /* sign */
            goto 103
      StackMap locals:
      StackMap stack: org.h2.index.TreeNode
       102: iconst_0
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session org.h2.result.Row org.h2.index.TreeNode org.h2.index.TreeNode int int org.h2.index.TreeNode int org.h2.index.TreeNode
      StackMap stack: org.h2.index.TreeNode int
       103: putfield org.h2.index.TreeNode.balance:I
       104: .line 260
            aload 9 /* l */
            iconst_0
            putfield org.h2.index.TreeNode.balance:I
       105: .line 261
            aload 9 /* l */
            astore 3 /* x */
        end local 9 // org.h2.index.TreeNode l
       106: .line 263
            goto 108
        end local 8 // int b
        end local 7 // org.h2.index.TreeNode r
       107: .line 265
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            ldc "b: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* x */
            getfield org.h2.index.TreeNode.balance:I
            iload 6 /* sign */
            imul
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
       108: .line 267
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            invokevirtual org.h2.index.TreeNode.isFromLeft:()Z
            istore 5 /* isLeft */
       109: .line 268
            aload 3 /* x */
            getfield org.h2.index.TreeNode.parent:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        end local 6 // int sign
       110: .line 225
      StackMap locals:
      StackMap stack:
            aload 4 /* n */
            ifnonnull 58
       111: .line 270
            return
        end local 5 // boolean isLeft
        end local 4 // org.h2.index.TreeNode n
        end local 3 // org.h2.index.TreeNode x
        end local 2 // org.h2.result.Row row
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0  112     0     this  Lorg/h2/index/TreeIndex;
            0  112     1  session  Lorg/h2/engine/Session;
            0  112     2      row  Lorg/h2/result/Row;
            3  112     3        x  Lorg/h2/index/TreeNode;
            7    8     4        n  Lorg/h2/index/TreeNode;
           10   11     4        n  Lorg/h2/index/TreeNode;
           18  112     4        n  Lorg/h2/index/TreeNode;
           12   53     5        d  Lorg/h2/index/TreeNode;
           14   17     6     temp  Lorg/h2/index/TreeNode;
           19   53     6        b  I
           22   53     7       xp  Lorg/h2/index/TreeNode;
           23   53     8       dp  Lorg/h2/index/TreeNode;
           55  112     5   isLeft  Z
           62  110     6     sign  I
           70  107     7        r  Lorg/h2/index/TreeNode;
           71  107     8        b  I
           86  106     9        l  Lorg/h2/index/TreeNode;
    MethodParameters:
         Name  Flags
      session  
      row      

  private org.h2.index.TreeNode findFirstNode(org.h2.result.SearchRow, boolean);
    descriptor: (Lorg/h2/result/SearchRow;Z)Lorg/h2/index/TreeNode;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.result.SearchRow row
        start local 2 // boolean withKey
         0: .line 273
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        start local 3 // org.h2.index.TreeNode x
         1: aload 3 /* x */
            astore 4 /* result */
        start local 4 // org.h2.index.TreeNode result
         2: .line 274
            goto 16
         3: .line 275
      StackMap locals: org.h2.index.TreeNode org.h2.index.TreeNode
      StackMap stack:
            aload 3 /* x */
            astore 4 /* result */
         4: .line 276
            aload 0 /* this */
            aload 3 /* x */
            getfield org.h2.index.TreeNode.row:Lorg/h2/result/Row;
            aload 1 /* row */
            invokevirtual org.h2.index.TreeIndex.compareRows:(Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)I
            istore 5 /* compare */
        start local 5 // int compare
         5: .line 277
            iload 5 /* compare */
            ifne 7
            iload 2 /* withKey */
            ifeq 7
         6: .line 278
            aload 0 /* this */
            aload 3 /* x */
            getfield org.h2.index.TreeNode.row:Lorg/h2/result/Row;
            aload 1 /* row */
            invokevirtual org.h2.index.TreeIndex.compareKeys:(Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)I
            istore 5 /* compare */
         7: .line 280
      StackMap locals: int
      StackMap stack:
            iload 5 /* compare */
            ifne 12
         8: .line 281
            iload 2 /* withKey */
            ifeq 10
         9: .line 282
            aload 3 /* x */
            areturn
        10: .line 284
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        11: .line 285
            goto 16
      StackMap locals:
      StackMap stack:
        12: iload 5 /* compare */
            ifle 15
        13: .line 286
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        14: .line 287
            goto 16
        15: .line 288
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        end local 5 // int compare
        16: .line 274
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            ifnonnull 3
        17: .line 291
            aload 4 /* result */
            areturn
        end local 4 // org.h2.index.TreeNode result
        end local 3 // org.h2.index.TreeNode x
        end local 2 // boolean withKey
        end local 1 // org.h2.result.SearchRow row
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   18     0     this  Lorg/h2/index/TreeIndex;
            0   18     1      row  Lorg/h2/result/SearchRow;
            0   18     2  withKey  Z
            1   18     3        x  Lorg/h2/index/TreeNode;
            2   18     4   result  Lorg/h2/index/TreeNode;
            5   16     5  compare  I
    MethodParameters:
         Name  Flags
      row      
      withKey  

  public org.h2.index.Cursor find(org.h2.table.TableFilter, org.h2.result.SearchRow, org.h2.result.SearchRow);
    descriptor: (Lorg/h2/table/TableFilter;Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)Lorg/h2/index/Cursor;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.table.TableFilter filter
        start local 2 // org.h2.result.SearchRow first
        start local 3 // org.h2.result.SearchRow last
         0: .line 296
            aload 0 /* this */
            aload 2 /* first */
            aload 3 /* last */
            invokevirtual org.h2.index.TreeIndex.find:(Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)Lorg/h2/index/Cursor;
            areturn
        end local 3 // org.h2.result.SearchRow last
        end local 2 // org.h2.result.SearchRow first
        end local 1 // org.h2.table.TableFilter filter
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/h2/index/TreeIndex;
            0    1     1  filter  Lorg/h2/table/TableFilter;
            0    1     2   first  Lorg/h2/result/SearchRow;
            0    1     3    last  Lorg/h2/result/SearchRow;
    MethodParameters:
        Name  Flags
      filter  
      first   
      last    

  public org.h2.index.Cursor find(org.h2.engine.Session, org.h2.result.SearchRow, org.h2.result.SearchRow);
    descriptor: (Lorg/h2/engine/Session;Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)Lorg/h2/index/Cursor;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
        start local 2 // org.h2.result.SearchRow first
        start local 3 // org.h2.result.SearchRow last
         0: .line 301
            aload 0 /* this */
            aload 2 /* first */
            aload 3 /* last */
            invokevirtual org.h2.index.TreeIndex.find:(Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)Lorg/h2/index/Cursor;
            areturn
        end local 3 // org.h2.result.SearchRow last
        end local 2 // org.h2.result.SearchRow first
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/h2/index/TreeIndex;
            0    1     1  session  Lorg/h2/engine/Session;
            0    1     2    first  Lorg/h2/result/SearchRow;
            0    1     3     last  Lorg/h2/result/SearchRow;
    MethodParameters:
         Name  Flags
      session  
      first    
      last     

  private org.h2.index.Cursor find(org.h2.result.SearchRow, org.h2.result.SearchRow);
    descriptor: (Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)Lorg/h2/index/Cursor;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=5, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.result.SearchRow first
        start local 2 // org.h2.result.SearchRow last
         0: .line 305
            aload 1 /* first */
            ifnonnull 9
         1: .line 306
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        start local 3 // org.h2.index.TreeNode x
         2: .line 307
            goto 7
         3: .line 308
      StackMap locals: org.h2.index.TreeNode
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.left:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        start local 4 // org.h2.index.TreeNode n
         4: .line 309
            aload 4 /* n */
            ifnonnull 6
         5: .line 310
            goto 8
         6: .line 312
      StackMap locals: org.h2.index.TreeNode
      StackMap stack:
            aload 4 /* n */
            astore 3 /* x */
        end local 4 // org.h2.index.TreeNode n
         7: .line 307
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            ifnonnull 3
         8: .line 314
      StackMap locals:
      StackMap stack:
            new org.h2.index.TreeCursor
            dup
            aload 0 /* this */
            aload 3 /* x */
            aconst_null
            aload 2 /* last */
            invokespecial org.h2.index.TreeCursor.<init>:(Lorg/h2/index/TreeIndex;Lorg/h2/index/TreeNode;Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)V
            areturn
        end local 3 // org.h2.index.TreeNode x
         9: .line 316
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* first */
            iconst_0
            invokevirtual org.h2.index.TreeIndex.findFirstNode:(Lorg/h2/result/SearchRow;Z)Lorg/h2/index/TreeNode;
            astore 3 /* x */
        start local 3 // org.h2.index.TreeNode x
        10: .line 317
            new org.h2.index.TreeCursor
            dup
            aload 0 /* this */
            aload 3 /* x */
            aload 1 /* first */
            aload 2 /* last */
            invokespecial org.h2.index.TreeCursor.<init>:(Lorg/h2/index/TreeIndex;Lorg/h2/index/TreeNode;Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)V
            areturn
        end local 3 // org.h2.index.TreeNode x
        end local 2 // org.h2.result.SearchRow last
        end local 1 // org.h2.result.SearchRow first
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0   this  Lorg/h2/index/TreeIndex;
            0   11     1  first  Lorg/h2/result/SearchRow;
            0   11     2   last  Lorg/h2/result/SearchRow;
            2    9     3      x  Lorg/h2/index/TreeNode;
            4    7     4      n  Lorg/h2/index/TreeNode;
           10   11     3      x  Lorg/h2/index/TreeNode;
    MethodParameters:
       Name  Flags
      first  
      last   

  public double getCost(org.h2.engine.Session, int[], org.h2.table.TableFilter[], int, org.h2.result.SortOrder, org.h2.command.dml.AllColumnsForPlan);
    descriptor: (Lorg/h2/engine/Session;[I[Lorg/h2/table/TableFilter;ILorg/h2/result/SortOrder;Lorg/h2/command/dml/AllColumnsForPlan;)D
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=9, locals=7, args_size=7
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
        start local 2 // int[] masks
        start local 3 // org.h2.table.TableFilter[] filters
        start local 4 // int filter
        start local 5 // org.h2.result.SortOrder sortOrder
        start local 6 // org.h2.command.dml.AllColumnsForPlan allColumnsSet
         0: .line 323
            aload 0 /* this */
            aload 2 /* masks */
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.tableData:Lorg/h2/table/PageStoreTable;
            invokevirtual org.h2.table.PageStoreTable.getRowCountApproximation:()J
         1: .line 324
            aload 3 /* filters */
            iload 4 /* filter */
            aload 5 /* sortOrder */
            iconst_0
            aload 6 /* allColumnsSet */
         2: .line 323
            invokevirtual org.h2.index.TreeIndex.getCostRangeIndex:([IJ[Lorg/h2/table/TableFilter;ILorg/h2/result/SortOrder;ZLorg/h2/command/dml/AllColumnsForPlan;)J
            l2d
            dreturn
        end local 6 // org.h2.command.dml.AllColumnsForPlan allColumnsSet
        end local 5 // org.h2.result.SortOrder sortOrder
        end local 4 // int filter
        end local 3 // org.h2.table.TableFilter[] filters
        end local 2 // int[] masks
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    3     0           this  Lorg/h2/index/TreeIndex;
            0    3     1        session  Lorg/h2/engine/Session;
            0    3     2          masks  [I
            0    3     3        filters  [Lorg/h2/table/TableFilter;
            0    3     4         filter  I
            0    3     5      sortOrder  Lorg/h2/result/SortOrder;
            0    3     6  allColumnsSet  Lorg/h2/command/dml/AllColumnsForPlan;
    MethodParameters:
               Name  Flags
      session        
      masks          
      filters        
      filter         
      sortOrder      
      allColumnsSet  

  public void remove(org.h2.engine.Session);
    descriptor: (Lorg/h2/engine/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
         0: .line 329
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.h2.index.TreeIndex.truncate:(Lorg/h2/engine/Session;)V
         1: .line 330
            return
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/h2/index/TreeIndex;
            0    2     1  session  Lorg/h2/engine/Session;
    MethodParameters:
         Name  Flags
      session  

  public void truncate(org.h2.engine.Session);
    descriptor: (Lorg/h2/engine/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
         0: .line 334
            aload 0 /* this */
            aconst_null
            putfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
         1: .line 335
            aload 0 /* this */
            lconst_0
            putfield org.h2.index.TreeIndex.rowCount:J
         2: .line 336
            return
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/h2/index/TreeIndex;
            0    3     1  session  Lorg/h2/engine/Session;
    MethodParameters:
         Name  Flags
      session  

  public void checkRename();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // org.h2.index.TreeIndex this
         0: .line 341
            return
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/index/TreeIndex;

  public boolean needRebuild();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.index.TreeIndex this
         0: .line 345
            iconst_1
            ireturn
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/index/TreeIndex;

  public boolean canGetFirstOrLast();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.index.TreeIndex this
         0: .line 350
            iconst_1
            ireturn
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/index/TreeIndex;

  public org.h2.index.Cursor findFirstOrLast(org.h2.engine.Session, boolean);
    descriptor: (Lorg/h2/engine/Session;Z)Lorg/h2/index/Cursor;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=3
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
        start local 2 // boolean first
         0: .line 355
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.closed:Z
            ifeq 2
         1: .line 356
            aload 0 /* this */
            invokevirtual org.h2.index.TreeIndex.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            athrow
         2: .line 358
      StackMap locals:
      StackMap stack:
            iload 2 /* first */
            ifeq 11
         3: .line 360
            aload 0 /* this */
            aload 1 /* session */
            aconst_null
            aconst_null
            invokevirtual org.h2.index.TreeIndex.find:(Lorg/h2/engine/Session;Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)Lorg/h2/index/Cursor;
            astore 3 /* cursor */
        start local 3 // org.h2.index.Cursor cursor
         4: .line 361
            goto 9
         5: .line 362
      StackMap locals: org.h2.index.Cursor
      StackMap stack:
            aload 3 /* cursor */
            invokeinterface org.h2.index.Cursor.getSearchRow:()Lorg/h2/result/SearchRow;
            astore 4 /* row */
        start local 4 // org.h2.result.SearchRow row
         6: .line 363
            aload 4 /* row */
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.columnIds:[I
            iconst_0
            iaload
            invokeinterface org.h2.result.SearchRow.getValue:(I)Lorg/h2/value/Value;
            astore 5 /* v */
        start local 5 // org.h2.value.Value v
         7: .line 364
            aload 5 /* v */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 9
         8: .line 365
            aload 3 /* cursor */
            areturn
        end local 5 // org.h2.value.Value v
        end local 4 // org.h2.result.SearchRow row
         9: .line 361
      StackMap locals:
      StackMap stack:
            aload 3 /* cursor */
            invokeinterface org.h2.index.Cursor.next:()Z
            ifne 5
        10: .line 368
            aload 3 /* cursor */
            areturn
        end local 3 // org.h2.index.Cursor cursor
        11: .line 370
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.root:Lorg/h2/index/TreeNode;
            astore 3 /* x */
        start local 3 // org.h2.index.TreeNode x
        12: .line 371
            goto 17
        13: .line 372
      StackMap locals: org.h2.index.TreeNode
      StackMap stack:
            aload 3 /* x */
            getfield org.h2.index.TreeNode.right:Lorg/h2/index/TreeNode;
            astore 4 /* n */
        start local 4 // org.h2.index.TreeNode n
        14: .line 373
            aload 4 /* n */
            ifnonnull 16
        15: .line 374
            goto 18
        16: .line 376
      StackMap locals: org.h2.index.TreeNode
      StackMap stack:
            aload 4 /* n */
            astore 3 /* x */
        end local 4 // org.h2.index.TreeNode n
        17: .line 371
      StackMap locals:
      StackMap stack:
            aload 3 /* x */
            ifnonnull 13
        18: .line 378
      StackMap locals:
      StackMap stack:
            new org.h2.index.TreeCursor
            dup
            aload 0 /* this */
            aload 3 /* x */
            aconst_null
            aconst_null
            invokespecial org.h2.index.TreeCursor.<init>:(Lorg/h2/index/TreeIndex;Lorg/h2/index/TreeNode;Lorg/h2/result/SearchRow;Lorg/h2/result/SearchRow;)V
            astore 5 /* cursor */
        start local 5 // org.h2.index.TreeCursor cursor
        19: .line 379
            aload 3 /* x */
            ifnonnull 21
        20: .line 380
            aload 5 /* cursor */
            areturn
        21: .line 384
      StackMap locals: org.h2.index.TreeIndex org.h2.engine.Session int org.h2.index.TreeNode top org.h2.index.TreeCursor
      StackMap stack:
            aload 5 /* cursor */
            invokevirtual org.h2.index.TreeCursor.getSearchRow:()Lorg/h2/result/SearchRow;
            astore 6 /* row */
        start local 6 // org.h2.result.SearchRow row
        22: .line 385
            aload 6 /* row */
            ifnonnull 24
        23: .line 386
            goto 28
        24: .line 388
      StackMap locals: org.h2.result.SearchRow
      StackMap stack:
            aload 6 /* row */
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.columnIds:[I
            iconst_0
            iaload
            invokeinterface org.h2.result.SearchRow.getValue:(I)Lorg/h2/value/Value;
            astore 7 /* v */
        start local 7 // org.h2.value.Value v
        25: .line 389
            aload 7 /* v */
            getstatic org.h2.value.ValueNull.INSTANCE:Lorg/h2/value/ValueNull;
            if_acmpeq 27
        26: .line 390
            aload 5 /* cursor */
            areturn
        end local 7 // org.h2.value.Value v
        end local 6 // org.h2.result.SearchRow row
        27: .line 392
      StackMap locals:
      StackMap stack:
            aload 5 /* cursor */
            invokevirtual org.h2.index.TreeCursor.previous:()Z
            ifne 21
        28: .line 393
      StackMap locals:
      StackMap stack:
            aload 5 /* cursor */
            areturn
        end local 5 // org.h2.index.TreeCursor cursor
        end local 3 // org.h2.index.TreeNode x
        end local 2 // boolean first
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   29     0     this  Lorg/h2/index/TreeIndex;
            0   29     1  session  Lorg/h2/engine/Session;
            0   29     2    first  Z
            4   11     3   cursor  Lorg/h2/index/Cursor;
            6    9     4      row  Lorg/h2/result/SearchRow;
            7    9     5        v  Lorg/h2/value/Value;
           12   29     3        x  Lorg/h2/index/TreeNode;
           14   17     4        n  Lorg/h2/index/TreeNode;
           19   29     5   cursor  Lorg/h2/index/TreeCursor;
           22   27     6      row  Lorg/h2/result/SearchRow;
           25   27     7        v  Lorg/h2/value/Value;
    MethodParameters:
         Name  Flags
      session  
      first    

  public long getRowCount(org.h2.engine.Session);
    descriptor: (Lorg/h2/engine/Session;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.index.TreeIndex this
        start local 1 // org.h2.engine.Session session
         0: .line 398
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.rowCount:J
            lreturn
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/h2/index/TreeIndex;
            0    1     1  session  Lorg/h2/engine/Session;
    MethodParameters:
         Name  Flags
      session  

  public long getRowCountApproximation();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.h2.index.TreeIndex this
         0: .line 403
            aload 0 /* this */
            getfield org.h2.index.TreeIndex.rowCount:J
            lreturn
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/index/TreeIndex;

  public long getDiskSpaceUsed();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.h2.index.TreeIndex this
         0: .line 408
            lconst_0
            lreturn
        end local 0 // org.h2.index.TreeIndex this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/index/TreeIndex;
}
SourceFile: "TreeIndex.java"