[
  {
    "name": "TestPlanCacheWithDifferentVariableTypes",
    "cases": [
      {
        "PrepareStmt": "prepare stmt from \"select ?, ?\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "1"}, {"Name": "v2", "Value": "2"}],
            "ExecuteSQL": "execute stmt using @v1, @v2"
          },
          {
            "Vars": [{"Name": "v1", "Value": "1"}, {"Name": "v2", "Value": "\"abc\""}],
            "ExecuteSQL": "execute stmt using @v1, @v2"
          },
          {
            "Vars": [{"Name": "v1", "Value": "10"}, {"Name": "v2", "Value": "\"cba\""}],
            "ExecuteSQL": "execute stmt using @v1, @v2"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select a from t1 where t1.b = ?\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "3"}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "2"}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "-200"}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"abc\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select t1.c, t2.c from t1 join t2 on t1.b = t2.b and t1.a = t2.a where t1.b = ?\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "1"}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "2"}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"abc\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select cast(? as decimal)\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "\"123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select cast(? as decimal(10,0))\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "\"123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select cast(? as decimal(5,4))\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "\"123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select cast(? as decimal(64, 30))\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "\"123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select cast(? as decimal(15,5))\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "\"123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      },
      {
        "PrepareStmt": "prepare stmt from \"select cast(? as decimal(5,5))\"",
        "Executes": [
          {
            "Vars": [{"Name": "v1", "Value": "\"123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-123456789.0123456789012345678901234567890123456789\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-1234567.1234567\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-0.99999\""}],
            "ExecuteSQL": "execute stmt using @v1"
          },
          {
            "Vars": [{"Name": "v1", "Value": "\"-99999.0\""}],
            "ExecuteSQL": "execute stmt using @v1"
          }
        ]
      }
    ]
  },
  {
    "name": "TestParameterPushDown",
    "cases": [
      {
        "SQL": "prepare s1 from 'select a from t use index(a) where a+0>?'; -- IndexReader + pushed-down Selection with parameters"
      },
      {
        "SQL": "execute s1 using @x1"
      },
      {
        "SQL": "execute s1 using @x5"
      },
      {
        "SQL": "prepare s1 from 'select * from t where b>?'; -- TableReader + pushed-down Selection with parameters"
      },
      {
        "SQL": "execute s1 using @x1"
      },
      {
        "SQL": "execute s1 using @x5"
      },
      {
        "SQL": "prepare s1 from 'select * from t use index(a) where a+0>? and b>?'; -- IndexLookup + pushed-down Selection with parameters"
      },
      {
        "SQL": "execute s1 using @x1,@x1"
      },
      {
        "SQL": "execute s1 using @x5,@x5"
      },
      {
        "SQL": "prepare s1 from 'select * from t limit ?'; -- pushed-down Limit with parameters"
      },
      {
        "SQL": "execute s1 using @x10"
      },
      {
        "SQL": "execute s1 using @x20"
      },
      {
        "SQL": "prepare s1 from 'select * from t order by b limit ?'; -- pushed-down TopN with parameters"
      },
      {
        "SQL": "execute s1 using @x1"
      },
      {
        "SQL": "execute s1 using @x5"
      },
      {
        "SQL": "prepare s1 from 'select b, sum(c+?) from t group by b'; -- pushed-down Agg with parameters"
      },
      {
        "SQL": "execute s1 using @x1"
      },
      {
        "SQL": "execute s1 using @x5"
      }
    ]
  }
]
