subtest sql_select_no_execute

sql admin
{
  "database": "system",
  "statements": [{"sql": "SELECT username FROM users where username = $1", "arguments": ["admin"]}]
}
----
{
 "num_statements": 1,
 "request": {
  "application_name": "$ api-v2-sql",
  "database": "system",
  "execute": false,
  "max_result_size": 10000,
  "separate_txns": false,
  "statements": [
   {
    "arguments": [
     "admin"
    ],
    "sql": "SELECT username FROM users WHERE username = $1"
   }
  ],
  "stop_on_error": false,
  "timeout": "5s"
 }
}

subtest end

subtest sql_select_users

sql admin
{
  "database": "system",
  "execute": true,
  "statements": [{"sql": "SELECT username FROM users where username = $1", "arguments": ["admin"]}]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "username",
      "oid": 25,
      "type": "STRING"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows": [
     {
      "username": "admin"
     }
    ],
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "SELECT"
   }
  ]
 },
 "num_statements": 1
}

subtest end

subtest regression_test_for_84385

# Regression test for #84385.
sql admin
{
  "database": "system",
  "execute": true,
  "statements": [{"sql": "SELECT 1, 2"}]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "?column?",
      "oid": 20,
      "type": "INT8"
     },
     {
      "name": "?column?_1",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows": [
     {
      "?column?": 1,
      "?column?_1": 2
     }
    ],
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "SELECT"
   }
  ]
 },
 "num_statements": 1
}

subtest end

subtest select_user_no_admin

sql non-admin expect-error
{
  "database": "system",
  "execute": true,
  "statements": [{"sql": "SELECT username FROM users where username = 'admin'"}]
}
----
42501|executing stmt 1: run-query-via-api: user authentic_user_noadmin does not have SELECT privilege on relation users

subtest end

subtest sql_multiple_statements

sql admin
{
  "database": "system",
  "execute": true,
  "statements": [
    {"sql": "SELECT username FROM users where username = 'admin'"},
    {"sql": "SELECT \"eventType\" FROM eventlog where \"eventType\" = 'node_restart'"}
  ]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "username",
      "oid": 25,
      "type": "STRING"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows": [
     {
      "username": "admin"
     }
    ],
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "SELECT"
   },
   {
    "columns": [
     {
      "name": "eventType",
      "oid": 25,
      "type": "STRING"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 2,
    "tag": "SELECT"
   }
  ]
 },
 "num_statements": 2
}

subtest end

subtest sql_schema_changes

sql admin
{
  "database": "mydb",
  "execute": true,
  "statements": [
    {"sql": "CREATE database mydb"},
    {"sql": "CREATE table mydb.test (id int)"},
    {"sql": "INSERT INTO test VALUES (1)"}
  ]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "CREATE DATABASE"
   },
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 2,
    "tag": "CREATE TABLE"
   },
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 1,
    "start": "1970-01-01T00:00:00Z",
    "statement": 3,
    "tag": "INSERT"
   }
  ]
 },
 "num_statements": 3
}

subtest end

subtest sql_syntax_error

sql admin expect-error
{
  "statements": [
    {"sql": "INSERT INTO WHERE"}
  ]
}
----
42601|parsing statement 1: at or near "where": syntax error

subtest end

subtest invalid_duration

sql admin expect-error
{
  "timeout": "abcdef",
  "statements": [
    {"sql": "INSERT INTO WHERE"}
  ]
}
----
XXUUU|time: invalid duration "abcdef"

subtest end

subtest sql_multiple_statements_in_one_line

sql admin expect-error
{
  "statements": [
    {"sql": "SELECT username FROM users where username = 'admin'; SELECT username FROM users where username = 'admin'"}
  ]
}
----
XXUUU|parsing statement 1: expecting 1 statement, found 2

subtest end

subtest sql_placeholder_errors

sql admin expect-error
{
  "statements": [
    {"sql": "SELECT username FROM users where username = $1"}
  ]
}
----
XXUUU|parsing statement 1: expected 1 placeholder(s), got 0


sql admin expect-error
{
  "statements": [
    {"sql": "SELECT username FROM users where username = $1", "arguments": ["blah", "blah"]}
  ]
}
----
XXUUU|parsing statement 1: expected 1 placeholder(s), got 2

subtest end

subtest sql_create_table

sql admin
{
  "database": "mydb",
  "execute": true,
  "statements": [{"sql": "CREATE TABLE foo (i INT PRIMARY KEY, j INT UNIQUE)"}]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "CREATE TABLE"
   }
  ]
 },
 "num_statements": 1
}

subtest end

subtest sql_alter_table

sql admin
{
  "database": "mydb",
  "execute": true,
  "statements": [
    {"sql": "ALTER TABLE foo RENAME TO bar"},
    {"sql": "INSERT INTO bar (i) VALUES (1), (2)"},
    {"sql": "ALTER TABLE bar DROP COLUMN j"},
    {"sql": "ALTER TABLE bar ADD COLUMN k INT DEFAULT 42"}
  ]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "ALTER TABLE"
   },
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 2,
    "start": "1970-01-01T00:00:00Z",
    "statement": 2,
    "tag": "INSERT"
   },
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 3,
    "tag": "ALTER TABLE"
   },
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 4,
    "tag": "ALTER TABLE"
   }
  ]
 },
 "num_statements": 4
}

sql admin
{
  "database": "mydb",
  "execute": true,
  "statements": [
    {"sql": "SELECT * FROM bar"}
  ]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "i",
      "oid": 20,
      "type": "INT8"
     },
     {
      "name": "k",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows": [
     {
      "i": 1,
      "k": 42
     },
     {
      "i": 2,
      "k": 42
     }
    ],
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "SELECT"
   }
  ]
 },
 "num_statements": 1
}

subtest end

subtest sql_drop_table

sql admin
{
  "database": "mydb",
  "execute": true,
  "statements": [
    {"sql": "DROP TABLE bar"}
  ]
}
----
{
 "execution": {
  "txn_results": [
   {
    "columns": [
     {
      "name": "rows_affected",
      "oid": 20,
      "type": "INT8"
     }
    ],
    "end": "1970-01-01T00:00:00Z",
    "rows_affected": 0,
    "start": "1970-01-01T00:00:00Z",
    "statement": 1,
    "tag": "DROP TABLE"
   }
  ]
 },
 "num_statements": 1
}

subtest end
