nu_plugin_connectorx 0.3.0

Load data from DBs in `nushell` using ConnectorX
use std/assert
use std/log

def "test plugin" [] {
  mut db_file = (mktemp --suffix .db) | path expand

  let data = [
    [a b];
    [0 0]
    [1 1]
    [2 1]
    [3 2]
    [4 3]
    [5 5]
    [6 8]
    [7 13]
  ]
  $data | into sqlite $db_file

  mut output = cx $"sqlite://($db_file)" -p a -n 3 -q "select * from main"
  $output = $output | sort-by "a"
  assert equal $data $output

  $output = cx $"sqlite://($db_file)" -q "select * from main"
  $output = $output | sort-by "a"
  assert equal $data $output

  let query_file = mktemp --suffix .sql
  "select * from main" | save -f $query_file
  $output = cx $"sqlite://($db_file)" -f $query_file
  $output = $output | sort-by "a"
  assert equal $data $output
  rm $query_file

  let parquet_output = mktemp --suffix .parquet
  cx $"sqlite://($db_file)" -p a -n 3 -q "select * from main" -o $parquet_output
  $output = polars open $parquet_output | polars collect | polars into-nu | sort-by "a"
  assert equal $data $output
  rm $parquet_output

  rm $db_file
}

def main [] {
  log info "Importing plugin..."
  plugin use connectorx
  plugin use polars

  let test_commands = (
    scope commands
    | where ($it.type == "custom")
    and ($it.name | str starts-with "test ")
    and not ($it.description | str starts-with "ignore")
    | get name
    | each {|test| [$"log info 'Running test: ($test)'" $test] } | flatten
    | str join "; "
  )

  nu --commands $"source ($env.CURRENT_FILE); ($test_commands)"
  log info "Tests completed successfully"
}