public class org.h2.table.Plan
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.h2.table.Plan
  super_class: java.lang.Object
{
  private final org.h2.table.TableFilter[] filters;
    descriptor: [Lorg/h2/table/TableFilter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.HashMap<org.h2.table.TableFilter, org.h2.table.PlanItem> planItems;
    descriptor: Ljava/util/HashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/HashMap<Lorg/h2/table/TableFilter;Lorg/h2/table/PlanItem;>;

  private final org.h2.expression.Expression[] allConditions;
    descriptor: [Lorg/h2/expression/Expression;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.h2.table.TableFilter[] allFilters;
    descriptor: [Lorg/h2/table/TableFilter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>(org.h2.table.TableFilter[], int, org.h2.expression.Expression);
    descriptor: ([Lorg/h2/table/TableFilter;ILorg/h2/expression/Expression;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=4
        start local 0 // org.h2.table.Plan this
        start local 1 // org.h2.table.TableFilter[] filters
        start local 2 // int count
        start local 3 // org.h2.expression.Expression condition
         0: .line 37
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 26
            aload 0 /* this */
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putfield org.h2.table.Plan.planItems:Ljava/util/HashMap;
         2: .line 38
            aload 0 /* this */
            iload 2 /* count */
            anewarray org.h2.table.TableFilter
            putfield org.h2.table.Plan.filters:[Lorg/h2/table/TableFilter;
         3: .line 39
            aload 1 /* filters */
            iconst_0
            aload 0 /* this */
            getfield org.h2.table.Plan.filters:[Lorg/h2/table/TableFilter;
            iconst_0
            iload 2 /* count */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 40
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 4 /* allCond */
        start local 4 // java.util.ArrayList allCond
         5: .line 41
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* all */
        start local 5 // java.util.ArrayList all
         6: .line 42
            aload 3 /* condition */
            ifnull 8
         7: .line 43
            aload 4 /* allCond */
            aload 3 /* condition */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
         8: .line 45
      StackMap locals: org.h2.table.Plan org.h2.table.TableFilter[] int org.h2.expression.Expression java.util.ArrayList java.util.ArrayList
      StackMap stack:
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         9: goto 13
        10: .line 46
      StackMap locals: int
      StackMap stack:
            aload 1 /* filters */
            iload 6 /* i */
            aaload
            astore 7 /* f */
        start local 7 // org.h2.table.TableFilter f
        11: .line 47
            aload 7 /* f */
            new org.h2.table.Plan$1
            dup
            aload 0 /* this */
            aload 5 /* all */
            aload 4 /* allCond */
            invokespecial org.h2.table.Plan$1.<init>:(Lorg/h2/table/Plan;Ljava/util/ArrayList;Ljava/util/ArrayList;)V
            invokevirtual org.h2.table.TableFilter.visit:(Lorg/h2/table/TableFilter$TableFilterVisitor;)V
        end local 7 // org.h2.table.TableFilter f
        12: .line 45
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        13: iload 6 /* i */
            iload 2 /* count */
            if_icmplt 10
        end local 6 // int i
        14: .line 57
            aload 0 /* this */
            aload 4 /* allCond */
            iconst_0
            anewarray org.h2.expression.Expression
            invokevirtual java.util.ArrayList.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast org.h2.expression.Expression[]
            putfield org.h2.table.Plan.allConditions:[Lorg/h2/expression/Expression;
        15: .line 58
            aload 0 /* this */
            aload 5 /* all */
            iconst_0
            anewarray org.h2.table.TableFilter
            invokevirtual java.util.ArrayList.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
            checkcast org.h2.table.TableFilter[]
            putfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
        16: .line 59
            return
        end local 5 // java.util.ArrayList all
        end local 4 // java.util.ArrayList allCond
        end local 3 // org.h2.expression.Expression condition
        end local 2 // int count
        end local 1 // org.h2.table.TableFilter[] filters
        end local 0 // org.h2.table.Plan this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   17     0       this  Lorg/h2/table/Plan;
            0   17     1    filters  [Lorg/h2/table/TableFilter;
            0   17     2      count  I
            0   17     3  condition  Lorg/h2/expression/Expression;
            5   17     4    allCond  Ljava/util/ArrayList<Lorg/h2/expression/Expression;>;
            6   17     5        all  Ljava/util/ArrayList<Lorg/h2/table/TableFilter;>;
            9   14     6          i  I
           11   12     7          f  Lorg/h2/table/TableFilter;
    MethodParameters:
           Name  Flags
      filters    
      count      
      condition  

  public org.h2.table.PlanItem getItem(org.h2.table.TableFilter);
    descriptor: (Lorg/h2/table/TableFilter;)Lorg/h2/table/PlanItem;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.table.Plan this
        start local 1 // org.h2.table.TableFilter filter
         0: .line 68
            aload 0 /* this */
            getfield org.h2.table.Plan.planItems:Ljava/util/HashMap;
            aload 1 /* filter */
            invokevirtual java.util.HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.h2.table.PlanItem
            areturn
        end local 1 // org.h2.table.TableFilter filter
        end local 0 // org.h2.table.Plan this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/h2/table/Plan;
            0    1     1  filter  Lorg/h2/table/TableFilter;
    MethodParameters:
        Name  Flags
      filter  

  public org.h2.table.TableFilter[] getFilters();
    descriptor: ()[Lorg/h2/table/TableFilter;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.table.Plan this
         0: .line 77
            aload 0 /* this */
            getfield org.h2.table.Plan.filters:[Lorg/h2/table/TableFilter;
            areturn
        end local 0 // org.h2.table.Plan this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/table/Plan;

  public void removeUnusableIndexConditions();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=1
        start local 0 // org.h2.table.Plan this
         0: .line 84
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         1: goto 9
         2: .line 85
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            iload 1 /* i */
            aaload
            astore 2 /* f */
        start local 2 // org.h2.table.TableFilter f
         3: .line 86
            aload 0 /* this */
            aload 2 /* f */
            iconst_1
            invokevirtual org.h2.table.Plan.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
         4: .line 87
            iload 1 /* i */
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            arraylength
            iconst_1
            isub
            if_icmplt 6
         5: .line 88
            aload 2 /* f */
            invokevirtual org.h2.table.TableFilter.getSession:()Lorg/h2/engine/Session;
            invokevirtual org.h2.engine.Session.getDatabase:()Lorg/h2/engine/Database;
            invokevirtual org.h2.engine.Database.getSettings:()Lorg/h2/engine/DbSettings;
            getfield org.h2.engine.DbSettings.earlyFilter:Z
            ifeq 7
         6: .line 92
      StackMap locals: org.h2.table.TableFilter
      StackMap stack:
            aload 2 /* f */
            iconst_0
            invokevirtual org.h2.table.TableFilter.optimizeFullCondition:(Z)V
         7: .line 94
      StackMap locals:
      StackMap stack:
            aload 2 /* f */
            invokevirtual org.h2.table.TableFilter.removeUnusableIndexConditions:()V
        end local 2 // org.h2.table.TableFilter f
         8: .line 84
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
         9: iload 1 /* i */
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            arraylength
            if_icmplt 2
        end local 1 // int i
        10: .line 96
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            dup
            astore 4
            arraylength
            istore 3
            iconst_0
            istore 2
            goto 14
      StackMap locals: org.h2.table.Plan top int int org.h2.table.TableFilter[]
      StackMap stack:
        11: aload 4
            iload 2
            aaload
            astore 1 /* f */
        start local 1 // org.h2.table.TableFilter f
        12: .line 97
            aload 0 /* this */
            aload 1 /* f */
            iconst_0
            invokevirtual org.h2.table.Plan.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
        end local 1 // org.h2.table.TableFilter f
        13: .line 96
            iinc 2 1
      StackMap locals:
      StackMap stack:
        14: iload 2
            iload 3
            if_icmplt 11
        15: .line 99
            return
        end local 0 // org.h2.table.Plan this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0  this  Lorg/h2/table/Plan;
            1   10     1     i  I
            3    8     2     f  Lorg/h2/table/TableFilter;
           12   13     1     f  Lorg/h2/table/TableFilter;

  public double calculateCost(org.h2.engine.Session, org.h2.command.dml.AllColumnsForPlan);
    descriptor: (Lorg/h2/engine/Session;Lorg/h2/command/dml/AllColumnsForPlan;)D
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=11, args_size=3
        start local 0 // org.h2.table.Plan this
        start local 1 // org.h2.engine.Session session
        start local 2 // org.h2.command.dml.AllColumnsForPlan allColumnsSet
         0: .line 109
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getTrace:()Lorg/h2/message/Trace;
            astore 3 /* t */
        start local 3 // org.h2.message.Trace t
         1: .line 110
            aload 3 /* t */
            invokevirtual org.h2.message.Trace.isDebugEnabled:()Z
            ifeq 3
         2: .line 111
            aload 3 /* t */
            ldc "Plan       : calculate cost for plan {0}"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            invokestatic java.util.Arrays.toString:([Ljava/lang/Object;)Ljava/lang/String;
            aastore
            invokevirtual org.h2.message.Trace.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
         3: .line 113
      StackMap locals: org.h2.message.Trace
      StackMap stack:
            dconst_1
            dstore 4 /* cost */
        start local 4 // double cost
         4: .line 114
            iconst_0
            istore 6 /* invalidPlan */
        start local 6 // boolean invalidPlan
         5: .line 115
            iconst_0
            istore 7 /* i */
        start local 7 // int i
         6: goto 24
         7: .line 116
      StackMap locals: double int int
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            iload 7 /* i */
            aaload
            astore 8 /* tableFilter */
        start local 8 // org.h2.table.TableFilter tableFilter
         8: .line 117
            aload 3 /* t */
            invokevirtual org.h2.message.Trace.isDebugEnabled:()Z
            ifeq 10
         9: .line 118
            aload 3 /* t */
            ldc "Plan       :   for table filter {0}"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 8 /* tableFilter */
            aastore
            invokevirtual org.h2.message.Trace.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        10: .line 120
      StackMap locals: org.h2.table.TableFilter
      StackMap stack:
            aload 8 /* tableFilter */
            aload 1 /* session */
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            iload 7 /* i */
            aload 2 /* allColumnsSet */
            invokevirtual org.h2.table.TableFilter.getBestPlanItem:(Lorg/h2/engine/Session;[Lorg/h2/table/TableFilter;ILorg/h2/command/dml/AllColumnsForPlan;)Lorg/h2/table/PlanItem;
            astore 9 /* item */
        start local 9 // org.h2.table.PlanItem item
        11: .line 121
            aload 0 /* this */
            getfield org.h2.table.Plan.planItems:Ljava/util/HashMap;
            aload 8 /* tableFilter */
            aload 9 /* item */
            invokevirtual java.util.HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        12: .line 122
            aload 3 /* t */
            invokevirtual org.h2.message.Trace.isDebugEnabled:()Z
            ifeq 16
        13: .line 123
            aload 3 /* t */
            ldc "Plan       :   best plan item cost {0} index {1}"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
        14: .line 124
            aload 9 /* item */
            getfield org.h2.table.PlanItem.cost:D
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            dup
            iconst_1
            aload 9 /* item */
            invokevirtual org.h2.table.PlanItem.getIndex:()Lorg/h2/index/Index;
            invokeinterface org.h2.index.Index.getPlanSQL:()Ljava/lang/String;
            aastore
        15: .line 123
            invokevirtual org.h2.message.Trace.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        16: .line 126
      StackMap locals: org.h2.table.PlanItem
      StackMap stack:
            dload 4 /* cost */
            dload 4 /* cost */
            aload 9 /* item */
            getfield org.h2.table.PlanItem.cost:D
            dmul
            dadd
            dstore 4 /* cost */
        17: .line 127
            aload 0 /* this */
            aload 8 /* tableFilter */
            iconst_1
            invokevirtual org.h2.table.Plan.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
        18: .line 128
            aload 8 /* tableFilter */
            invokevirtual org.h2.table.TableFilter.getJoinCondition:()Lorg/h2/expression/Expression;
            astore 10 /* on */
        start local 10 // org.h2.expression.Expression on
        19: .line 129
            aload 10 /* on */
            ifnull 23
        20: .line 130
            aload 10 /* on */
            getstatic org.h2.expression.ExpressionVisitor.EVALUATABLE_VISITOR:Lorg/h2/expression/ExpressionVisitor;
            invokevirtual org.h2.expression.Expression.isEverything:(Lorg/h2/expression/ExpressionVisitor;)Z
            ifne 23
        21: .line 131
            iconst_1
            istore 6 /* invalidPlan */
        22: .line 132
            goto 25
        end local 10 // org.h2.expression.Expression on
        end local 9 // org.h2.table.PlanItem item
        end local 8 // org.h2.table.TableFilter tableFilter
        23: .line 115
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        24: iload 7 /* i */
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            arraylength
            if_icmplt 7
        end local 7 // int i
        25: .line 136
      StackMap locals:
      StackMap stack:
            iload 6 /* invalidPlan */
            ifeq 27
        26: .line 137
            ldc Infinity
            dstore 4 /* cost */
        27: .line 139
      StackMap locals:
      StackMap stack:
            aload 3 /* t */
            invokevirtual org.h2.message.Trace.isDebugEnabled:()Z
            ifeq 29
        28: .line 140
            aload 1 /* session */
            invokevirtual org.h2.engine.Session.getTrace:()Lorg/h2/message/Trace;
            ldc "Plan       : plan cost {0}"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            dload 4 /* cost */
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aastore
            invokevirtual org.h2.message.Trace.debug:(Ljava/lang/String;[Ljava/lang/Object;)V
        29: .line 142
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.table.Plan.allFilters:[Lorg/h2/table/TableFilter;
            dup
            astore 10
            arraylength
            istore 9
            iconst_0
            istore 8
            goto 33
      StackMap locals: org.h2.table.Plan org.h2.engine.Session org.h2.command.dml.AllColumnsForPlan org.h2.message.Trace double int top int int org.h2.table.TableFilter[]
      StackMap stack:
        30: aload 10
            iload 8
            aaload
            astore 7 /* f */
        start local 7 // org.h2.table.TableFilter f
        31: .line 143
            aload 0 /* this */
            aload 7 /* f */
            iconst_0
            invokevirtual org.h2.table.Plan.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
        end local 7 // org.h2.table.TableFilter f
        32: .line 142
            iinc 8 1
      StackMap locals:
      StackMap stack:
        33: iload 8
            iload 9
            if_icmplt 30
        34: .line 145
            dload 4 /* cost */
            dreturn
        end local 6 // boolean invalidPlan
        end local 4 // double cost
        end local 3 // org.h2.message.Trace t
        end local 2 // org.h2.command.dml.AllColumnsForPlan allColumnsSet
        end local 1 // org.h2.engine.Session session
        end local 0 // org.h2.table.Plan this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   35     0           this  Lorg/h2/table/Plan;
            0   35     1        session  Lorg/h2/engine/Session;
            0   35     2  allColumnsSet  Lorg/h2/command/dml/AllColumnsForPlan;
            1   35     3              t  Lorg/h2/message/Trace;
            4   35     4           cost  D
            5   35     6    invalidPlan  Z
            6   25     7              i  I
            8   23     8    tableFilter  Lorg/h2/table/TableFilter;
           11   23     9           item  Lorg/h2/table/PlanItem;
           19   23    10             on  Lorg/h2/expression/Expression;
           31   32     7              f  Lorg/h2/table/TableFilter;
    MethodParameters:
               Name  Flags
      session        
      allColumnsSet  

  private void setEvaluatable(org.h2.table.TableFilter, boolean);
    descriptor: (Lorg/h2/table/TableFilter;Z)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=7, args_size=3
        start local 0 // org.h2.table.Plan this
        start local 1 // org.h2.table.TableFilter filter
        start local 2 // boolean b
         0: .line 149
            aload 1 /* filter */
            aload 1 /* filter */
            iload 2 /* b */
            invokevirtual org.h2.table.TableFilter.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
         1: .line 150
            aload 0 /* this */
            getfield org.h2.table.Plan.allConditions:[Lorg/h2/expression/Expression;
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 5
      StackMap locals: org.h2.table.Plan org.h2.table.TableFilter int top int int org.h2.expression.Expression[]
      StackMap stack:
         2: aload 6
            iload 4
            aaload
            astore 3 /* e */
        start local 3 // org.h2.expression.Expression e
         3: .line 151
            aload 3 /* e */
            aload 1 /* filter */
            iload 2 /* b */
            invokevirtual org.h2.expression.Expression.setEvaluatable:(Lorg/h2/table/TableFilter;Z)V
        end local 3 // org.h2.expression.Expression e
         4: .line 150
            iinc 4 1
      StackMap locals:
      StackMap stack:
         5: iload 4
            iload 5
            if_icmplt 2
         6: .line 153
            return
        end local 2 // boolean b
        end local 1 // org.h2.table.TableFilter filter
        end local 0 // org.h2.table.Plan this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0    this  Lorg/h2/table/Plan;
            0    7     1  filter  Lorg/h2/table/TableFilter;
            0    7     2       b  Z
            3    4     3       e  Lorg/h2/expression/Expression;
    MethodParameters:
        Name  Flags
      filter  
      b       
}
SourceFile: "Plan.java"
NestMembers:
  org.h2.table.Plan$1
InnerClasses:
  org.h2.table.Plan$1
  public abstract TableFilterVisitor = org.h2.table.TableFilter$TableFilterVisitor of org.h2.table.TableFilter