Compare commits
99 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dff78412dd | |||
| 028d32420d | |||
| c84a640259 | |||
| 407408ec29 | |||
| 4016c3e5cd | |||
| 1feb803aab | |||
| 93a40970c3 | |||
| 96b9581089 | |||
| b60c0bb0ec | |||
| c2baf6923b | |||
| 1660a6a17c | |||
| ea38e7a151 | |||
| 5a37437055 | |||
| 3fe62af886 | |||
| b4441507e2 | |||
| 8ae0eedd44 | |||
| 5f28de8ac3 | |||
| 888be16090 | |||
| 329adfc935 | |||
| 447112b17f | |||
| 984bc30256 | |||
| 417cbc8df9 | |||
| b6b98ad30f | |||
| 97970f2a2c | |||
| 9c4d520d5c | |||
| 47a08166a4 | |||
| 6429b56443 | |||
| 4bdfce6250 | |||
| 138e766817 | |||
| aeb92f56a7 | |||
| 4a5fd1b5c1 | |||
| 050b36391e | |||
| 9868442889 | |||
| 309d2e0b3f | |||
| e16ad50aa7 | |||
| 60dbb903cc | |||
| 9a126782f1 | |||
| 4d004f5847 | |||
| d5fb47bcc8 | |||
| 0878c6df19 | |||
| 52815f1a76 | |||
| 2721bd8d04 | |||
| e8fa859ab9 | |||
| 5869eec4f4 | |||
| 298475b326 | |||
| 04ebd83f08 | |||
| 18d08642d7 | |||
| da8bfebc36 | |||
| 89b9392c25 | |||
| bba24120f1 | |||
| 88145225cc | |||
| 8e3208528e | |||
| 9d8161218a | |||
| dc63ed66f1 | |||
| c7ac0c9877 | |||
| 9189740028 | |||
| 77c55fa669 | |||
| 4691d7950a | |||
| 069f9277d1 | |||
| 09b64cbfb7 | |||
| abd3739168 | |||
| a72d53de51 | |||
| 6777216e37 | |||
| 13c9c1bcd9 | |||
| 946dd88db6 | |||
| ad43cce945 | |||
| 7099bd3cde | |||
| 5908891d6b | |||
| 6778c338d4 | |||
| 823b413ca3 | |||
| a0dd202f67 | |||
| 595386e370 | |||
| 51a29e5069 | |||
| e782a280cc | |||
| 927e6b2d50 | |||
| 52860c3267 | |||
| ce153bde4c | |||
| 302329d5b2 | |||
| 65a48fa5ae | |||
| bb7887ea82 | |||
| a8f84c9d17 | |||
| 1f82fb2c79 | |||
| 44f91724b6 | |||
| c904dbb68b | |||
| fbf449f9e0 | |||
| c0cc92a741 | |||
| 10655e46de | |||
| 619c200ea1 | |||
| dfb5f0b1b1 | |||
| 39e97ac3f9 | |||
| 936d9254c0 | |||
| 44390e765d | |||
| 995c0ba8eb | |||
| c72c624daa | |||
| 9e774b2dfa | |||
| 40de389bcb | |||
| 0fcb7b1105 | |||
| cea99e8b70 | |||
| 1fad29c0f9 |
@@ -0,0 +1,17 @@
|
||||
# Windows cross-link fix for the D1 release matrix (cargo-zigbuild).
|
||||
#
|
||||
# Rust's std links `-lsynchronization` on Windows (WaitOnAddress-based thread
|
||||
# parking). Rust normally satisfies this from the `self-contained` mingw libs
|
||||
# of its `rust-mingw` component — which rust-overlay does NOT ship — and Zig's
|
||||
# bundled mingw (used by `cargo zigbuild`) doesn't provide `libsynchronization.a`
|
||||
# either. The actual symbols are *forwarded by kernel32* (already linked), so an
|
||||
# empty stub import lib is enough to satisfy the linker. See `ci/winstub/`.
|
||||
#
|
||||
# These sections apply ONLY when building for the Windows targets, so host
|
||||
# builds (the gate's `cargo test`/`clippy`) and the Linux release targets are
|
||||
# unaffected.
|
||||
[target.x86_64-pc-windows-gnu]
|
||||
rustflags = ["-L", "native=ci/winstub"]
|
||||
|
||||
[target.aarch64-pc-windows-gnullvm]
|
||||
rustflags = ["-L", "native=ci/winstub"]
|
||||
@@ -0,0 +1,65 @@
|
||||
# CI toolchain image for rdbms-playground.
|
||||
#
|
||||
# Purpose: a SMALL job-container image that
|
||||
# (a) satisfies the Gitea act_runner job-container contract — /bin/sleep (the
|
||||
# keep-alive entrypoint), bash (run: steps), node (JS actions such as
|
||||
# actions/checkout); a bare nixos/nix image has none of these and won't
|
||||
# even start (verified by the ci-probe run: "/bin/sleep: no such file"); and
|
||||
# (b) carries the project's pinned nix toolchain with the flake's devShell
|
||||
# pre-warmed, so CI runs `nix develop -c cargo ...` against a warm store.
|
||||
#
|
||||
# Base: node:22-bookworm-slim. Debian slim already provides bash + coreutils
|
||||
# (sleep); the node tag adds the actions runtime. Far smaller than the
|
||||
# catthehacker runner images (which bundle a whole GitHub-runner emulation we
|
||||
# don't need).
|
||||
FROM node:22-bookworm-slim
|
||||
|
||||
# nix install + flake eval needs these. git because flakes prefer a VCS context
|
||||
# and tools shell out to it. Drop apt lists to keep the layer small.
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
curl xz-utils ca-certificates git \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Single-user nix (--no-daemon): store at /nix owned by root, no daemon/systemd
|
||||
# needed — the correct mode for a container. The official installer refuses root
|
||||
# and shells out to `sudo` purely to create /nix; pre-creating it ourselves (we
|
||||
# ARE root) sidesteps both. Enable flakes globally so every nix invocation (and
|
||||
# the runner's steps) get nix-command + flakes without flags.
|
||||
# nix.conf is written FIRST so the installer's own `nix-env` profile step reads
|
||||
# it: `build-users-group =` (empty) makes single-user nix build as the calling
|
||||
# user (root) instead of demanding the nixbld group/users a daemon install would
|
||||
# create; flakes are enabled globally in the same file.
|
||||
RUN mkdir -m 0755 /nix && chown root:root /nix \
|
||||
&& mkdir -p /etc/nix \
|
||||
&& printf 'build-users-group =\nexperimental-features = nix-command flakes\n' > /etc/nix/nix.conf \
|
||||
&& curl --proto '=https' --tlsv1.2 -sSf -L https://nixos.org/nix/install -o /tmp/nix-install.sh \
|
||||
&& sh /tmp/nix-install.sh --no-daemon \
|
||||
&& rm /tmp/nix-install.sh
|
||||
ENV PATH=/root/.nix-profile/bin:/nix/var/nix/profiles/default/bin:$PATH
|
||||
# We set PATH directly instead of sourcing the profile, so also point nix at the
|
||||
# Debian CA bundle (already installed) for substituter HTTPS — otherwise the
|
||||
# profile-provided NIX_SSL_CERT_FILE is missing and store downloads fail.
|
||||
ENV NIX_SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
|
||||
|
||||
# Warm the flake's devShell into the store: realizes nixpkgs + the pinned Rust
|
||||
# toolchain (rustc/cargo/clippy/rustfmt) + cargo-sweep. Only the inputs that
|
||||
# determine the shell are copied, so this expensive layer is cached and only
|
||||
# re-runs when the flake or the toolchain pin changes — not on every source edit.
|
||||
# (devShell eval is lazy: packages.default — and thus Cargo.toml/Cargo.lock — is
|
||||
# never forced here, so it needn't be present.)
|
||||
WORKDIR /warm
|
||||
COPY flake.nix flake.lock rust-toolchain.toml ./
|
||||
RUN nix develop -c rustc --version \
|
||||
&& nix develop -c cargo --version \
|
||||
&& nix develop -c cargo clippy --version \
|
||||
&& nix develop -c cargo fmt --version \
|
||||
&& nix develop -c cargo sweep --version
|
||||
WORKDIR /
|
||||
RUN rm -rf /warm
|
||||
|
||||
# FOLLOW-UP optimisation (intentionally NOT done here, see CI notes): cargo
|
||||
# dependency + target caching. Each CI run still compiles the ~296-crate graph
|
||||
# from scratch and pulls crate sources from crates.io. A later pass can bake
|
||||
# `cargo fetch` (offline crate sources) and/or a warmed target dir, or wire
|
||||
# sccache, to cut run time. Correctness/first-green first; speed next.
|
||||
@@ -0,0 +1,51 @@
|
||||
# Builds the nix CI toolchain image (.gitea/ci-image/Dockerfile) and pushes it
|
||||
# to the Gitea registry. The gate (ci.yaml) runs *inside* this image, so this
|
||||
# workflow is the gate's prerequisite. It only needs to run when the image's
|
||||
# inputs change — the Dockerfile, the flake, or the toolchain pin — plus on
|
||||
# manual dispatch.
|
||||
#
|
||||
# DinD pattern: plain docker:27-dind (one of the tested ci-test samples). No
|
||||
# registry proxy here — the runner's containers have direct internet egress
|
||||
# (the ci-probe run cloned github.com and pulled docker.io with no proxy), and
|
||||
# this image's RUN steps fetch from apt + nixos.org, which the proxy isn't
|
||||
# guaranteed to forward. The dind-cached:local + REGISTRY_PROXY_HOST variant is
|
||||
# a later speed optimisation for base-image pull caching, not needed for green.
|
||||
name: build-ci-image
|
||||
on:
|
||||
push:
|
||||
# Branch pushes only. Tag pushes ignore `paths:` filters and would rebuild
|
||||
# the (unchanged) image on every release tag — `branches: ['**']` excludes
|
||||
# tags, so this runs only when a branch push actually changes an image input.
|
||||
branches: ['**']
|
||||
paths:
|
||||
- '.gitea/ci-image/Dockerfile'
|
||||
- 'flake.nix'
|
||||
- 'flake.lock'
|
||||
- 'rust-toolchain.toml'
|
||||
- '.gitea/workflows/build-ci-image.yaml'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ci-public
|
||||
services:
|
||||
docker:
|
||||
image: docker:27-dind
|
||||
options: --privileged
|
||||
env:
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
env:
|
||||
DOCKER_HOST: tcp://docker:2375
|
||||
IMAGE: git.lazyeval.net/oli/rdbms-playground-ci
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: wait for docker
|
||||
run: until docker version >/dev/null 2>&1; do sleep 1; done
|
||||
- name: registry login
|
||||
run: |
|
||||
echo "${{ secrets.REGISTRY_TOKEN }}" \
|
||||
| docker login git.lazyeval.net -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin
|
||||
- name: build
|
||||
run: docker build -f .gitea/ci-image/Dockerfile -t "$IMAGE:latest" .
|
||||
- name: push
|
||||
run: docker push "$IMAGE:latest"
|
||||
@@ -0,0 +1,45 @@
|
||||
# The CI gate. Runs inside the prebuilt nix toolchain image (built + pushed by
|
||||
# build-ci-image.yaml), so the pinned 1.95.0 toolchain is already warm — steps
|
||||
# just enter the flake devShell and run cargo.
|
||||
#
|
||||
# Gate = clippy + test. fmt is deliberately NOT gated yet (ADR-ci-002: the tree
|
||||
# isn't clean under stock rustfmt; revisit on main). The release job (static
|
||||
# binary for D2) and the platform matrix layer on later, step by step.
|
||||
name: ci
|
||||
on:
|
||||
push:
|
||||
# Branch pushes only — a tag push hits the same commit the branch push
|
||||
# already gated, so `branches: ['**']` drops the redundant tag-triggered
|
||||
# run (the release workflow owns tags). Pushing commits + a tag together
|
||||
# still gates the commits via the branch push.
|
||||
branches: ['**']
|
||||
# Skip the gate for changes that can't affect clippy/test — docs, markdown,
|
||||
# and the website subproject (it has its own workflow, website.yaml, that
|
||||
# builds + publishes it). A push touching crate code *and* these still runs
|
||||
# (paths-ignore only skips when *all* changed files match).
|
||||
# Note: flake/toolchain changes are NOT ignored — they can shift the
|
||||
# toolchain and thus lint/test outcomes.
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
- 'website/**'
|
||||
- '.gitea/workflows/website.yaml'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
- 'website/**'
|
||||
- '.gitea/workflows/website.yaml'
|
||||
|
||||
jobs:
|
||||
gate:
|
||||
runs-on: ci-public
|
||||
# Public package → anonymous pull, no credentials needed.
|
||||
container:
|
||||
image: git.lazyeval.net/oli/rdbms-playground-ci:latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: clippy (warnings denied)
|
||||
run: nix develop -c cargo clippy --all-targets -- -D warnings
|
||||
- name: test
|
||||
run: nix develop -c cargo test --no-fail-fast
|
||||
@@ -0,0 +1,95 @@
|
||||
# macOS release leg — the two *-apple-darwin binaries, built natively on the
|
||||
# Tart (Apple-Silicon) runner and attached to an existing Gitea release.
|
||||
#
|
||||
# Manual dispatch only: the Mac runner is intermittent, so this is triggered by
|
||||
# hand (with the Mac up) for a given release tag. The 4-target Linux/Windows
|
||||
# release (release.yaml) runs on the tag itself and never waits on the Mac, so a
|
||||
# release always has those four; the macOS two are added by dispatching this.
|
||||
#
|
||||
# NOTE: Gitea exposes workflow_dispatch only for workflows on the DEFAULT branch,
|
||||
# so this becomes triggerable once the CI work is merged to `main`.
|
||||
name: release-macos
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: 'Release tag to build the macOS binaries for and attach to (e.g. v0.1.0)'
|
||||
required: true
|
||||
|
||||
jobs:
|
||||
release-macos:
|
||||
runs-on: macos
|
||||
env:
|
||||
NIX_CONFIG: "experimental-features = nix-command flakes"
|
||||
TAG: ${{ inputs.tag }}
|
||||
# Auto-provided by Gitea Actions; has repo write (release) scope.
|
||||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
API: ${{ github.server_url }}/api/v1
|
||||
REPO: ${{ github.repository }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.tag }}
|
||||
|
||||
- name: test
|
||||
run: nix develop -c cargo test --no-fail-fast
|
||||
|
||||
- name: build, de-nix, sign, package + publish
|
||||
run: |
|
||||
set -e
|
||||
mkdir -p dist
|
||||
for t in aarch64-apple-darwin x86_64-apple-darwin; do
|
||||
echo "==================== $t ===================="
|
||||
nix develop -c cargo build --release --target "$t"
|
||||
f="target/$t/release/rdbms-playground"
|
||||
|
||||
# Rewrite the nix-store libiconv load path to the system one, then
|
||||
# re-sign ad-hoc (install_name_tool invalidates the signature; arm64
|
||||
# requires a valid one). Guard against any remaining /nix/store dep.
|
||||
for l in $(otool -L "$f" | awk '/\/nix\/store.*libiconv.*dylib/ {print $1}'); do
|
||||
install_name_tool -change "$l" /usr/lib/libiconv.2.dylib "$f"
|
||||
done
|
||||
codesign --force --sign - "$f"
|
||||
if otool -L "$f" | grep -q /nix/store; then
|
||||
echo "ERROR: $t binary links a /nix/store dylib"; exit 1
|
||||
fi
|
||||
|
||||
out="rdbms-playground-$TAG-$t"
|
||||
cp "$f" "dist/$out"
|
||||
( cd dist && shasum -a 256 "$out" > "$out.sha256" ) # macOS: shasum, not sha256sum
|
||||
done
|
||||
ls -l dist
|
||||
|
||||
# Idempotent create-or-get the release (release.yaml likely created it
|
||||
# already from the tag), then upload the two macOS binaries + checksums.
|
||||
created=$(curl -sS -X POST "$API/repos/$REPO/releases" \
|
||||
-H "Authorization: token $TOKEN" -H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"Automated release for $TAG.\"}")
|
||||
id=$(printf '%s' "$created" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{const o=JSON.parse(s);process.stdout.write(String(o.id||""))}catch(e){}})')
|
||||
if [ -z "$id" ]; then
|
||||
id=$(curl -sS "$API/repos/$REPO/releases/tags/$TAG" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
| node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{process.stdout.write(String(JSON.parse(s).id))})')
|
||||
fi
|
||||
echo "release id: $id"
|
||||
for fa in dist/*; do
|
||||
name=$(basename "$fa")
|
||||
echo "uploading $name"
|
||||
curl -sS -X POST "$API/repos/$REPO/releases/$id/assets?name=$name" \
|
||||
-H "Authorization: token $TOKEN" -F "attachment=@$fa" > /dev/null
|
||||
done
|
||||
echo "published macOS assets for $TAG"
|
||||
|
||||
- name: prune nix store — keep the last 2 toolchain generations
|
||||
# The runner wipes the workspace each run, so cargo target/ never
|
||||
# accumulates. Bound the persistent nix store by generation: record the
|
||||
# current devShell as a generation of a persistent profile (in $HOME),
|
||||
# keep the 2 newest, reclaim what older ones referenced.
|
||||
if: always()
|
||||
run: |
|
||||
echo "--- disk before ---"; df -h / | tail -1
|
||||
P="$HOME/.cache/rdbms-ci/toolchain"
|
||||
nix develop --profile "$P" -c true || true
|
||||
nix-env -p "$P" --delete-generations +2 || true
|
||||
nix-collect-garbage || true
|
||||
echo "--- disk after ---"; df -h / | tail -1
|
||||
@@ -0,0 +1,92 @@
|
||||
# Release: on a version tag, build the cross-platform binaries and publish them
|
||||
# to a Gitea release with checksums. Runs in the prebuilt CI image, so the
|
||||
# pinned toolchain + the release targets + cargo-zigbuild/zig are already warm.
|
||||
#
|
||||
# Matrix (D1, cross-built from Linux x86_64 via cargo-zigbuild):
|
||||
# x86_64-unknown-linux-musl aarch64-unknown-linux-musl (static, D2)
|
||||
# x86_64-pc-windows-gnu aarch64-pc-windows-gnullvm (standalone .exe)
|
||||
# macOS is deferred — its arboard/AppKit link needs Apple's SDK (see ADR-ci-001).
|
||||
# D3 package-manager manifests layer on later.
|
||||
#
|
||||
# Tests run once (host) before the matrix, so a tag can never publish untested
|
||||
# code, even one pointing at a commit that was never gated on a branch.
|
||||
name: release
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ci-public
|
||||
container:
|
||||
image: git.lazyeval.net/oli/rdbms-playground-ci:latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: test
|
||||
run: nix develop -c cargo test --no-fail-fast
|
||||
|
||||
build:
|
||||
needs: test
|
||||
runs-on: ci-public
|
||||
container:
|
||||
image: git.lazyeval.net/oli/rdbms-playground-ci:latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
target:
|
||||
- x86_64-unknown-linux-musl
|
||||
- aarch64-unknown-linux-musl
|
||||
- x86_64-pc-windows-gnu
|
||||
- aarch64-pc-windows-gnullvm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: build
|
||||
run: nix develop -c cargo zigbuild --release --target ${{ matrix.target }}
|
||||
|
||||
- name: package + publish
|
||||
# Pin bash: the runner defaults scripted steps to dash, which rejects
|
||||
# `set -o pipefail`. bash is in the CI image.
|
||||
shell: bash
|
||||
env:
|
||||
TARGET: ${{ matrix.target }}
|
||||
# GITEA_TOKEN is auto-provided with repo write (release) scope.
|
||||
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
API: ${{ github.server_url }}/api/v1
|
||||
REPO: ${{ github.repository }}
|
||||
TAG: ${{ github.ref_name }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
# Windows targets produce a .exe; the rest a bare binary.
|
||||
case "$TARGET" in *windows*) EXT=.exe ;; *) EXT= ;; esac
|
||||
BIN="target/$TARGET/release/rdbms-playground$EXT"
|
||||
OUT="rdbms-playground-$TAG-$TARGET$EXT"
|
||||
mkdir -p dist
|
||||
cp "$BIN" "dist/$OUT"
|
||||
( cd dist && sha256sum "$OUT" > "$OUT.sha256" )
|
||||
ls -l dist
|
||||
|
||||
# Create the release for this tag; if a sibling matrix job already
|
||||
# created it, look it up instead (idempotent + race-tolerant).
|
||||
created=$(curl -sS -X POST "$API/repos/$REPO/releases" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"Automated release for $TAG.\"}")
|
||||
id=$(printf '%s' "$created" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{const o=JSON.parse(s);process.stdout.write(String(o.id||""))}catch(e){}})')
|
||||
if [ -z "$id" ]; then
|
||||
id=$(curl -sS "$API/repos/$REPO/releases/tags/$TAG" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
| node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{process.stdout.write(String(JSON.parse(s).id))})')
|
||||
fi
|
||||
echo "release id: $id"
|
||||
|
||||
for f in dist/*; do
|
||||
name=$(basename "$f")
|
||||
echo "uploading $name"
|
||||
curl -sS -X POST "$API/repos/$REPO/releases/$id/assets?name=$name" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-F "attachment=@$f" > /dev/null
|
||||
done
|
||||
echo "published $TARGET assets for $TAG"
|
||||
@@ -0,0 +1,66 @@
|
||||
# Build the docs/marketing website and deploy it to Cloudflare Pages.
|
||||
#
|
||||
# One Pages project, two branches (no second project, no sub-folders — Pages
|
||||
# maps a branch to a *subdomain alias*, not a path):
|
||||
# main → production (the project's production branch → relplay.org)
|
||||
# website → preview (alias `website.<project>.pages.dev`; a custom
|
||||
# `staging.relplay.org` can be attached to it)
|
||||
# wrangler treats `--branch=<production-branch>` as a production deploy and any
|
||||
# other branch as a preview, so a single workflow covers both — the Pages
|
||||
# project's production branch MUST be set to `main`.
|
||||
#
|
||||
# Pure-Node build: the `.cast` recordings are committed, so no cargo/Rust is
|
||||
# needed here. Runs on the bare `ci-public` runner (node already present; pnpm
|
||||
# via corepack, pinned by package.json's `packageManager`). No job container —
|
||||
# unlike the Rust gate, this needs none.
|
||||
#
|
||||
# Required Actions secrets (set once in the repo/org settings):
|
||||
# CLOUDFLARE_API_TOKEN — token with "Cloudflare Pages: Edit" on the account
|
||||
# CLOUDFLARE_ACCOUNT_ID — the account id that owns the Pages project
|
||||
name: website
|
||||
on:
|
||||
push:
|
||||
branches: [main, website]
|
||||
# Only when the site (or this workflow) actually changes — crate-only
|
||||
# pushes don't redeploy the site.
|
||||
paths:
|
||||
- 'website/**'
|
||||
- '.gitea/workflows/website.yaml'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ci-public
|
||||
defaults:
|
||||
run:
|
||||
working-directory: website
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: preflight — toolchain present
|
||||
run: |
|
||||
node --version
|
||||
corepack --version
|
||||
|
||||
- name: enable pnpm (pinned by packageManager)
|
||||
run: corepack enable
|
||||
|
||||
- name: install
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
- name: build
|
||||
run: pnpm build
|
||||
|
||||
- name: deploy to Cloudflare Pages
|
||||
shell: bash
|
||||
env:
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
BRANCH: ${{ github.ref_name }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# `dist` is relative to website/ (the working-directory). The branch
|
||||
# name decides production (main) vs preview (anything else).
|
||||
npx --yes wrangler@4 pages deploy dist \
|
||||
--project-name=relplay \
|
||||
--branch="$BRANCH"
|
||||
@@ -2,6 +2,12 @@
|
||||
/target
|
||||
**/*.rs.bk
|
||||
|
||||
# Nix
|
||||
# `nix build` output symlinks (`result`, `result-<name>`), direnv's cached env
|
||||
/result
|
||||
/result-*
|
||||
.direnv/
|
||||
|
||||
# Snapshot test review files
|
||||
*.snap.new
|
||||
*.pending-snap
|
||||
|
||||
@@ -37,9 +37,9 @@ Current decisions at a glance (each backed by an ADR):
|
||||
simple to advanced (ADR-0003). No other sigils.
|
||||
- **Project format:** `project.yaml` + `data/<table>.csv` +
|
||||
`history.log`; `playground.db` is a derived artifact (ADR-0004,
|
||||
amended by ADR-0015). Implemented through Iteration 4 +
|
||||
cleanup; export/import (Iter 5) and migration framework /
|
||||
--resume / persistent input history (Iter 6) pending.
|
||||
amended by ADR-0015). Fully implemented (ADR-0015 Iterations
|
||||
1–6): export/import, `--resume`, persistent input history, and
|
||||
the migration framework scaffold are all done.
|
||||
- **Project storage runtime:** every command persists through to
|
||||
db + yaml + csv + history.log in one execution context, gated
|
||||
by the combined db persistence logic; commit-db-last ordering
|
||||
@@ -108,6 +108,23 @@ Current decisions at a glance (each backed by an ADR):
|
||||
SQL `select` / `with` / `insert` / `update` / `delete`
|
||||
(ADR-0039). `EXPLAIN QUERY PLAN` never executes, so
|
||||
explaining a destructive command is safe.
|
||||
- **Continuous integration & release** (built on the `ci` branch,
|
||||
2026-06-15; decisions in `docs/ci/adr/` — **ADR-ci-001/002/003**,
|
||||
a namespace kept separate from the main ADR sequence to avoid
|
||||
cross-branch number collisions, like the website's): a self-hosted
|
||||
**Gitea Actions** pipeline built on a **nix flake** (pinned Rust
|
||||
`1.95.0` — one source of toolchain for dev *and* CI) plus a
|
||||
prebuilt CI image. **Gate** (`ci.yaml`): `clippy -D warnings` +
|
||||
`cargo test` on every branch push / PR. **Release** on a `v*` tag
|
||||
(`release.yaml`): the four non-macOS **D1** targets cross-built
|
||||
with `cargo-zigbuild` (Linux musl static + standalone Windows
|
||||
`.exe`); the two macOS targets via the **dispatched**
|
||||
`release-macos.yaml` on a Tart Apple-Silicon runner (de-nix the
|
||||
`libiconv` load path + ad-hoc re-sign). All published to a Gitea
|
||||
release with `.sha256`s. **`fmt` is intentionally not gated yet**
|
||||
(the tree isn't stock-`rustfmt`-clean). `workflow_dispatch` is
|
||||
Gitea-default-branch-only, so `release-macos` is dispatchable once
|
||||
this lands on `main`.
|
||||
|
||||
## Repository layout
|
||||
|
||||
@@ -165,7 +182,10 @@ Key invariants in the code:
|
||||
ADR. In-flight discussion stays in conversation or issues
|
||||
until it settles. The ADR-0000 index-upkeep rule applies:
|
||||
every ADR change updates `docs/adr/README.md` in the same
|
||||
edit.
|
||||
edit. ADR **numbers** are assigned at merge-to-`main` (draft
|
||||
under a placeholder `ADR-XXXX` / `draft-<slug>.md` on a
|
||||
branch) to avoid cross-branch collisions — see ADR-0000
|
||||
"Numbering discipline".
|
||||
- **Issue tracking.** Bugs and enhancements are filed as Gitea
|
||||
issues (see *Issue tracking — Gitea via `tea`* below).
|
||||
`docs/requirements.md` and the ADRs remain the source of truth
|
||||
@@ -318,16 +338,8 @@ all of `target/`, forcing a full from-scratch rebuild).
|
||||
These are explicitly tracked (mostly in `requirements.md`) but
|
||||
not yet implemented:
|
||||
|
||||
- **Project storage** (track 2): largely implemented through
|
||||
Iteration 4 + cleanup pass + safety hardening (Iterations
|
||||
1–4 of ADR-0015). Pending pieces: `export` / `import` (Iter
|
||||
5), `--resume` + persistent input history hydration +
|
||||
migration framework scaffold (Iter 6).
|
||||
- **Modify relationship** (C3a): drop+add covers the use case
|
||||
today.
|
||||
- **m:n convenience** (C4): auto-generates a junction table
|
||||
with appropriate FKs — depends on relationships being solid
|
||||
(they are).
|
||||
- **Strong syntax-help in parse errors** (H1a): point users at
|
||||
missing keywords/clauses rather than the unexpected
|
||||
character. *(H1 — the friendly **database**-error layer — is
|
||||
@@ -338,14 +350,17 @@ not yet implemented:
|
||||
- **Session log + Markdown export** (V4): the bigger UX
|
||||
project — scrollable session journal, smart structure
|
||||
rendering, save-as-markdown.
|
||||
- **Readline shortcuts** (I1b): Ctrl-A/Ctrl-E, Ctrl-W/Ctrl-K/
|
||||
Ctrl-U.
|
||||
- **Multi-line input** (I1): Enter inserts newline,
|
||||
Ctrl-Enter submits.
|
||||
- **Tab completion** (I3), **syntax highlighting** (I4).
|
||||
- **ER diagram export** (V3).
|
||||
- **CI** (TT5): test infrastructure exists; CI workflow not
|
||||
yet configured.
|
||||
- **Full TT5** (CI): the pipeline is live (see the CI decision
|
||||
above / `docs/ci/adr/`), but "all tiers on all OSes" isn't
|
||||
complete — **Windows is build-only** (cross-compiled, not
|
||||
executed: no Windows runner) and **Tier 4** (PTY, TT4) isn't
|
||||
wired in CI.
|
||||
- **D3 packaging**: prebuilt binaries + checksums ship to Gitea
|
||||
releases, but the Homebrew / Scoop / winget / `cargo binstall`
|
||||
manifests are not done.
|
||||
|
||||
## Handoff notes
|
||||
|
||||
|
||||
@@ -68,6 +68,12 @@ tempfile = "3.27.0"
|
||||
incremental = false
|
||||
debug = "line-tables-only"
|
||||
|
||||
# Release builds back the distributed binaries (D2: single static binary).
|
||||
# strip = "symbols" drops the symbol table at link time so the shipped artifact
|
||||
# is lean (≈13 MB → 10 MB for the musl build) without a separate strip step.
|
||||
[profile.release]
|
||||
strip = "symbols"
|
||||
|
||||
[lints.rust]
|
||||
unsafe_code = "forbid"
|
||||
unreachable_pub = "warn"
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# `ci/winstub/` — empty Windows import-lib stub
|
||||
|
||||
`libsynchronization.a` here is an **empty `ar` archive** (8 bytes: `!<arch>\n`),
|
||||
referenced by `.cargo/config.toml` via `-L native=ci/winstub` for the Windows
|
||||
release targets.
|
||||
|
||||
## Why
|
||||
|
||||
The D1 release matrix cross-compiles Windows binaries from Linux with
|
||||
`cargo zigbuild` (see `docs/ci/adr/`). Rust's `std` links `-lsynchronization`
|
||||
for its `WaitOnAddress`-based thread parking. That import library is normally
|
||||
provided by Rust's `rust-mingw` "self-contained" component — which `rust-overlay`
|
||||
does not ship — and Zig's bundled mingw doesn't carry it either, so the link
|
||||
fails with:
|
||||
|
||||
```
|
||||
error: unable to find dynamic system library 'synchronization'
|
||||
```
|
||||
|
||||
The functions it would import (`WaitOnAddress`, `WakeByAddressSingle`,
|
||||
`WakeByAddressAll`) are **forwarded by `kernel32.dll`**, which is already linked,
|
||||
so they resolve at link and run time without a real `synchronization` import
|
||||
library. An **empty** stub is therefore sufficient: it satisfies the `-l`
|
||||
lookup and contributes no symbols.
|
||||
|
||||
## Regenerating
|
||||
|
||||
```
|
||||
zig ar rcs ci/winstub/libsynchronization.a
|
||||
```
|
||||
@@ -0,0 +1 @@
|
||||
!<arch>
|
||||
@@ -38,6 +38,44 @@ The index lists ADRs in numerical order. Each entry shows the
|
||||
number, title, and — where relevant — status annotations such as
|
||||
"Superseded by ADR-NNNN" or "Deprecated".
|
||||
|
||||
## Numbering discipline
|
||||
|
||||
ADR numbers are a single global sequence, so two branches can each grab
|
||||
"the next number" independently and collide on merge. (This happened when
|
||||
the `website` branch's ADR-0042 met `main`'s ADR-0042, resolved by
|
||||
renumbering the former to ADR-0044.) To prevent it:
|
||||
|
||||
**Assign an ADR's number at merge-to-`main`, not at creation.** While the
|
||||
work lives on a non-`main` branch, draft the ADR under a placeholder — an
|
||||
`ADR-XXXX` title and a `draft-<slug>.md` filename — and reference it that
|
||||
way from any plan or notes. Give it the next free number only when the
|
||||
branch merges to `main`, renaming the file and updating its references in
|
||||
the same step.
|
||||
|
||||
A number is "taken" only once it appears in `main`'s `docs/adr/README.md`,
|
||||
which is the single source of truth for the next free number — never
|
||||
compute "next" from a feature branch. A branch that genuinely needs a real
|
||||
number up front may instead reserve one by landing a stub index entry on
|
||||
`main` first, but placeholder-until-merge is the default.
|
||||
|
||||
### Subproject ADR namespaces
|
||||
|
||||
A long-lived subproject developed on its own branch can escape the shared
|
||||
integer pool entirely by keeping its decision records in a **separate
|
||||
namespace**, rather than fighting collisions on every merge. The **website**
|
||||
(`docs/website/adr/`) is the first: its ADRs use a dated sequence —
|
||||
`<date>-adr-website-<NNN>.md`, referenced in prose as `ADR-website-NNN` —
|
||||
and are indexed by their own `docs/website/adr/README.md`. Because the
|
||||
date-plus-subproject prefix is disjoint from `main`'s integer sequence, a
|
||||
website ADR and a `main` ADR can never claim "the same number" again. (This
|
||||
namespace was created on 2026-06-10 after the website's ADR collided with
|
||||
`main`'s on consecutive numbers — drafted 0042, bumped to 0044, both times
|
||||
landing on a number `main` had taken; the move retired it from the pool as
|
||||
**ADR-website-001**.) The main `docs/adr/` index carries a pointer to each
|
||||
such namespace. Use this for a new subproject only when it is genuinely
|
||||
self-contained and branch-isolated; one-off cross-cutting decisions stay in
|
||||
the global sequence.
|
||||
|
||||
## Out-of-scope discipline
|
||||
|
||||
ADRs (and the plans they spawn) lean heavily on "out of scope" language.
|
||||
|
||||
@@ -414,5 +414,41 @@ time-boxed-`recv` path. We therefore test the **pure pieces**
|
||||
exhaustively (label fn, capture state machine, nearest-deadline helper)
|
||||
and assert plumbing via Tier-3, rather than over-claiming an integration
|
||||
test of the `tokio` timeout itself.
|
||||
</content>
|
||||
</invoke>
|
||||
|
||||
## Amendment 1 — `Ctrl-G` demo-mode alias for F1 (2026-06-15)
|
||||
|
||||
**Context.** The contextual `hint` overlay (ADR-0053 / H2) is opened with
|
||||
**F1**. But F1 reaches the app only as an escape sequence (`\eOP` /
|
||||
`\e[11~`), and the `autocast` recorder used for our screencasts **cannot
|
||||
emit escape sequences** — so a cast can never trigger F1, and the single
|
||||
most teaching-relevant overlay is unreachable in recordings. The same
|
||||
wall already bit step-captions (which is why `Ctrl+]`, a single control
|
||||
byte, was chosen over `Ctrl+!`).
|
||||
|
||||
**Decision.** In **demo mode only**, **`Ctrl-G`** is an alias for F1. It
|
||||
runs the exact F1 hint logic (live-input → form hint; empty input →
|
||||
recent-error / getting-started) and is **badged as `[F1]`** (not
|
||||
`[CTRL-G]`) so a recorded cast is visually identical to a genuine F1
|
||||
press. `Ctrl-G` is the only viable choice: it is a single legacy control
|
||||
byte autocast can send, whereas `Ctrl`+digit (e.g. the mnemonic `Ctrl-1`)
|
||||
is **not encodable in a legacy terminal at all** — digits have no control
|
||||
byte, so `Ctrl-1` arrives as a bare `1`; the kitty protocol *would* encode
|
||||
it but only as an escape sequence (the very thing autocast can't send),
|
||||
and this app deliberately does not enable keyboard-enhancement flags.
|
||||
|
||||
**Why demo-gated.** The shipped keymap stays F1-only — a real user never
|
||||
trips the alias, and demo mode is also the mode teachers/presenters run,
|
||||
so the alias is available exactly where it's wanted. Outside demo mode
|
||||
`Ctrl-G` falls through to the inert catch-all (the `Char(c)` insert arm
|
||||
excludes CONTROL, so no `g` is typed).
|
||||
|
||||
**Scope.** `hint_key` guard in `App::handle_key` gains the demo-gated
|
||||
`Ctrl-G` disjunct; `demo_badge_label` maps `Ctrl-G → [F1]` (consulted
|
||||
only in demo mode). Test-first: three `app.rs` Tier-1 tests (alias fires
|
||||
on input + on empty input; inert when demo off) + the badge-map
|
||||
assertion. The keybinding strip (ADR-0051) is **not** changed — F1 stays
|
||||
the advertised key; `Ctrl-G` is a recorder aid, and the badge already
|
||||
reads `[F1]`.
|
||||
|
||||
*(Editorial: this amendment also removed two stray `</content>` /
|
||||
`</invoke>` lines accidentally committed at the end of this file.)*
|
||||
|
||||
@@ -189,9 +189,18 @@ over keeping journaling coupled in the worker (which would have needed the
|
||||
no-op-skip / read-only sites no longer journal; success is journalled at
|
||||
the dispatch layer (`spawn_dsl_dispatch` / `run_replay` / app-command
|
||||
sites). The ring stays `Vec<String>`; `seed_history` / `ProjectSwitched`
|
||||
are untouched. The vestigial worker `source` plumbing (the `_source`
|
||||
param on `finalize_persistence` / `do_rebuild_from_text` and the thin
|
||||
read-only `*_request` wrappers) is left in place — a clean follow-up.
|
||||
are untouched. The vestigial worker `source` plumbing has since been
|
||||
**fully unwound** (2026-06-14 follow-up): `_source` removed from
|
||||
`finalize_persistence` / `do_rebuild_from_text`; the three read-only
|
||||
`*_request` wrappers inlined and deleted; and — because the cascade ran
|
||||
deeper than first estimated — the now-dead `source` param dropped from
|
||||
the ~30 worker handlers (leaf + composite) that only forwarded it, plus
|
||||
the `source` field removed from the `DescribeTable` / `QueryData` /
|
||||
`RunSelect` requests and the matching `DatabaseHandle` method parameters
|
||||
(the ~164 call-site churn was mostly tests). The only `source` left in
|
||||
the worker is the snapshot/undo label (`snapshot_then` /
|
||||
`stage_pre_mutation` / `begin_batch`), passed at the match-arm level.
|
||||
Purely mechanical, compiler-guided, no behaviour change.
|
||||
- **App commands recall bare.** Because they are dispatched outside the
|
||||
`ExecuteDsl`/spawn path, app commands journal **simple** (`advanced =
|
||||
false`) at their own sites, and `submit` excludes them from the ring's
|
||||
|
||||
@@ -0,0 +1,428 @@
|
||||
# ADR-0053: Contextual `hint` — F1 live-input keybinding + `hint` command, with a tier-3 teaching corpus (H2)
|
||||
|
||||
## Status
|
||||
|
||||
Accepted — **implemented 2026-06-15** (plan:
|
||||
`docs/plans/20260614-adr-0053-contextual-hint-H2.md`; the F1 keybinding +
|
||||
`hint` command, the `hint_ids` per-form keying + `hint_key_for_input_in_mode`,
|
||||
`last_error_hint_key` + `friendly::error_hint_class`, the `note_hint*`
|
||||
renderers, and the `hint.cmd.*`/`hint.err.*` corpus for every command form
|
||||
+ the 9 runtime error classes, with the comprehensiveness coverage test
|
||||
and the ADR-0051 strip advertising F1). Closes **A1** + requirements
|
||||
**H2**. Deferred: the pre-submit-diagnostic route + `diagnostic.*` blocks
|
||||
(#38), clause-concept hints (#37). Revised after a `/runda` review
|
||||
(2026-06-14): corrected the verbosity-default fact; re-keyed tier-3
|
||||
content off `help_id`; split the pre-submit-diagnostic and runtime-error
|
||||
paths; added a comprehensiveness coverage test. Revised again during
|
||||
Phase B implementation (2026-06-15): the first exemplar showed per-*node*
|
||||
keying is too coarse for multi-form commands (`add`/`drop`/`show`/
|
||||
`create`), so D3 now keys tier-3 content **per form** via a
|
||||
`hint_ids: &[&str]` array mirroring `usage_ids` — and **clause-concept
|
||||
hints** are recorded as a deferred extension (issue #37). During Phase C
|
||||
the **pre-submit-diagnostic route + the ~33 `diagnostic.*` blocks** were
|
||||
**deferred** (issue #38) — `Diagnostic` doesn't carry its class key, so
|
||||
the route needs a broad change for marginal value (D6). v1 therefore
|
||||
ships command-form hints + the 9 runtime error-class hints. The parallel
|
||||
question of whether the in-app `help` command should likewise distinguish
|
||||
advanced-SQL forms is tracked **separately** as Gitea issue #36.
|
||||
|
||||
Decided in conversation 2026-06-14. Closes the last open piece of **A1**
|
||||
(the canonical app-command set, ADR-0003): every app command is
|
||||
implemented except `hint`, which ADR-0003's command table listed as
|
||||
*"Request a hint for the current input (ADR pending)."* This ADR is that
|
||||
pending decision. Tracked as **H2** in `docs/requirements.md`.
|
||||
|
||||
References ADR-0003 (app-command set + the `:` escape), ADR-0019 (the
|
||||
friendly error layer / H1), ADR-0021 (per-command usage templates / H1a),
|
||||
ADR-0022 (ambient typing assistance — colour + hint panel + completion),
|
||||
ADR-0027 (input validity indicator), ADR-0046 (sidebar navigation +
|
||||
responsive input hint), ADR-0049 (input-field readline keymap), and
|
||||
ADR-0051 (context/state-aware keybinding strip).
|
||||
|
||||
## Context
|
||||
|
||||
`hint` is the only unbuilt app command. The naive reading — "show a hint" —
|
||||
hides a real subtlety, and a real cost.
|
||||
|
||||
**The subtlety: a submitted `hint` command cannot see live input.** App
|
||||
commands are submitted with Enter, which empties the input buffer. By the
|
||||
time `hint` dispatches, the partial command it was meant to help with is
|
||||
gone. So "a hint for the current input" cannot be served by a submitted
|
||||
command alone — it needs a *keybinding* that acts on the live buffer
|
||||
without submitting. ADR-0003 said "current input"; `requirements.md`
|
||||
broadened it to "current input **or the most recent error**." Both are
|
||||
wanted; they map to two different trigger surfaces.
|
||||
|
||||
**The cost: the value of `hint` is content, not plumbing.** The app
|
||||
already carries two tiers of contextual text:
|
||||
|
||||
- **Tier 1** — terse, always-on: syntax colour (ADR-0022); the error
|
||||
*headline* alone (ADR-0019, when `messages_verbosity: Short`).
|
||||
- **Tier 2** — short contextual lines: the ambient typing prose /
|
||||
`expected` set, shown live while typing (ADR-0022, catalogue
|
||||
`hint.ambient_*` / `hint.value_slot_*`); and the error `hint:` field —
|
||||
which, because `Verbosity::Verbose` is the **default**
|
||||
(`src/friendly/translate.rs:46`), is shown **by default** beneath every
|
||||
error headline (`messages short` is the opt-*out*, not `messages
|
||||
verbose` the opt-in).
|
||||
|
||||
So the verbose error hint is **already on screen by default**. If `hint`
|
||||
merely re-showed it, it would duplicate what the user can already see (and
|
||||
the ambient panel). To justify itself, `hint` must add a **tier 3**: a
|
||||
genuinely deeper, *teaching*-grade explanation — what the command/error
|
||||
means, a worked example, and the underlying relational concept. That
|
||||
corpus does not exist yet, and
|
||||
authoring it (to the standard of a teaching tool, where "pedagogy wins
|
||||
ties") is the bulk of the work.
|
||||
|
||||
The mechanism is small and reuses everything already present: the command
|
||||
REGISTRY (`src/dsl/grammar/mod.rs`), the `AppCommand` enum
|
||||
(`src/dsl/command.rs`), key dispatch (`App::handle_key`,
|
||||
`src/app.rs:1155`), the `note_help`/`note_help_topic` renderers
|
||||
(`src/app.rs:2982`/`3021`), the parser/walker expected-set
|
||||
(`ParseError.expected`, `WalkResult.tail_expected`), the friendly
|
||||
catalogue + `t!` macro + `keys.rs` validation, and the output styling
|
||||
vocabulary (`OutputStyleClass::Hint`).
|
||||
|
||||
## Decision
|
||||
|
||||
### D1 — Two surfaces, no topic argument
|
||||
|
||||
`hint` is delivered through **two complementary surfaces**:
|
||||
|
||||
1. **F1 keybinding → live input.** Pressing **F1** while typing renders a
|
||||
tier-3 hint for the command currently in the buffer, into the output
|
||||
panel, **without submitting or altering the buffer**. This is the
|
||||
primary, most-valuable path (it serves the literal "current input").
|
||||
2. **`hint` command → most recent error.** Submitting `hint` renders the
|
||||
tier-3 expansion of the most recent error. This is why the command
|
||||
exists despite the empty-buffer problem: the thing it helps with is
|
||||
the *last thing you tried*, not the now-empty buffer.
|
||||
|
||||
`hint` takes **no topic argument**. Explicit per-command reference is
|
||||
already `help <topic>` (H3); `hint` is purely *contextual*, which keeps
|
||||
the two cleanly distinct (`hint` = "help me with what I'm doing right
|
||||
now"; `help insert` = "show me the insert reference").
|
||||
|
||||
F1 is a **read-only overlay**: it never alters the input buffer, the
|
||||
cursor, or the live completion memo (ADR-0022) — it only emits a block
|
||||
into the output journal. (It must therefore be handled in `handle_key`
|
||||
*before* the "any other key clears the memo" fall-through.)
|
||||
|
||||
### D2 — Trigger matrix
|
||||
|
||||
| Trigger | Buffer / state | Result |
|
||||
|---|---|---|
|
||||
| **F1** | non-empty input | tier-3 hint for the command being typed. (No "expected next" line — the always-on tier-2 ambient panel already shows it live; tier-2 owns position-awareness.) |
|
||||
| **F1** | empty input, a recent error exists | tier-3 expansion of that error |
|
||||
| **F1** | empty input, no recent error | a short "getting started" pointer (press F1 while typing a command; `help` for the full list) |
|
||||
| **`hint`** (submitted) | a recent error exists | tier-3 expansion of that error (primary use) |
|
||||
| **`hint`** (submitted) | no recent error | the same "getting started" pointer |
|
||||
|
||||
F1 is inert behind a modal and while a sidebar panel holds navigation
|
||||
focus (consistent with the existing `handle_key` gates, ADR-0046); it is
|
||||
active in the input context in both Simple and Advanced mode.
|
||||
|
||||
**Error routes.** **Runtime errors** (the 9 `translate_error` classes)
|
||||
occur *after* submit; the **`hint` command / empty-input F1** path reads
|
||||
them via the stored `last_error_hint_key` (D5) and renders their
|
||||
`hint.err.<class>` block. (A second route for **pre-submit diagnostics**
|
||||
on the F1 live-input path was specified but is **deferred** — D6 / issue
|
||||
#38; with a diagnostic present, F1 shows the command block and tier-2
|
||||
shows the diagnostic.) **`:`-prefix handling:**
|
||||
on the simple-mode one-shot escape (`: SELECT …`), command
|
||||
identification for the F1 path strips the leading `:` first, so the
|
||||
advanced form is matched.
|
||||
|
||||
### D3 — The tier-3 content model
|
||||
|
||||
Tier-3 blocks live in the friendly catalogue under the existing `hint:`
|
||||
top-level namespace (where tier-2 ambient strings already live), in two
|
||||
new sub-namespaces:
|
||||
|
||||
- **`hint.cmd.<hint_id>`** — one per command **form**, keyed by a **new
|
||||
`hint_ids: &'static [&'static str]`** field on `CommandNode`
|
||||
(`src/dsl/grammar/mod.rs:512`), **mirroring the existing `usage_ids`**.
|
||||
The F1 live-input path resolves the current input to its form's hint key
|
||||
via `hint_key_for_input_in_mode`, which reuses the same form-word
|
||||
disambiguation as `usage_key_for_input_in_mode`.
|
||||
|
||||
**Why an array mirroring `usage_ids`, not a per-node `hint_id`**
|
||||
*(`/runda`/implementation revision, 2026-06-15)*: a single per-node key
|
||||
is too coarse. Several entry words are **one node spanning many forms** —
|
||||
`add` (column/relationship/index/constraint), `drop` (table/column/
|
||||
relationship/index), `show` (data/table/tables/relationships/indexes),
|
||||
`create` (table/index). A live-input hint for `add 1:n relationship` is
|
||||
only useful if it is *specific to relationships*, so the content must be
|
||||
**per form**, not per node. The project already solved exactly this for
|
||||
usage templates (`usage_ids` is a per-form array, disambiguated by the
|
||||
form word), so `hint_ids` mirrors it. Single-form nodes carry one entry;
|
||||
multi-form nodes carry one per form. This also covers the advanced-SQL
|
||||
forms whose `usage_ids` are empty (`SQL_INSERT/UPDATE/DELETE`,
|
||||
`EXPLAIN_SQL`) — they get their own `hint_ids` directly, independent of
|
||||
usage, with mode-correct SQL examples. (The `help`-list collapse of
|
||||
advanced-SQL forms is a separate gap — issue #36.)
|
||||
|
||||
**Deferred extension — clause-concept hints** (issue #37): per-form is
|
||||
the right granularity for tier-3 *teaching* (position-awareness within a
|
||||
form is owned by tier-2 ambient + the live `Next:` line, D4). But some
|
||||
**concepts live inside a clause**, not a form — `… on delete ⟨cascade|
|
||||
set null|restrict⟩` (referential actions), the `create table` constraint
|
||||
slots (`primary`/`unique`/`check`/`foreign`), `with pk`, `1:n`/`m:n`
|
||||
cardinality. A learner parked in such a clause may want teaching deeper
|
||||
than tier-2's candidate list but narrower than the whole-form block. v1
|
||||
does **not** build this (it would multiply content for points whose value
|
||||
we can't yet measure, and we don't expect to accumulate usage statistics
|
||||
to drive it empirically — it will be tackled as a deliberate follow-up
|
||||
job). The keying does not lock it out: a later `hint.concept.<topic>`
|
||||
namespace can be surfaced when the cursor sits in a recognized clause,
|
||||
layered on top of the per-form block.
|
||||
- **`hint.err.<class>`** — one per error/diagnostic class, keyed by the
|
||||
friendly error/diagnostic key (e.g. `hint.err.foreign_key.child_side`,
|
||||
`hint.err.type_mismatch`, `hint.err.insert_arity_mismatch`). Used by
|
||||
both error routes (D2).
|
||||
|
||||
Each tier-3 block is a **structured entry with three labelled parts**, so
|
||||
the voice stays consistent and the renderer can style them uniformly:
|
||||
|
||||
```yaml
|
||||
hint.cmd.dsl.insert:
|
||||
what: "Add one or more rows to a table."
|
||||
example: "insert into Customers values ('Ann', 'ann@x.io')"
|
||||
concept: "A row is one record; each value lines up with a column, in
|
||||
order. Columns typed `serial`/`shortid` fill themselves — leave them out."
|
||||
```
|
||||
|
||||
- **`what`** — one or two plain sentences: what this command does / what
|
||||
this error means.
|
||||
- **`example`** — a single concrete, copyable line (rendered neutral, not
|
||||
muted, so it stands out as runnable).
|
||||
- **`concept`** — the underlying relational idea, in teaching voice; the
|
||||
part that makes this tier-3 rather than tier-2.
|
||||
|
||||
`concept` is optional where there is genuinely no concept beyond the
|
||||
mechanics (e.g. `quit`); `what` + `example` are always present.
|
||||
|
||||
### D4 — Rendering
|
||||
|
||||
Both surfaces render through the `App::note_hint*` family (sibling of
|
||||
`note_help`/`note_help_topic`, `src/app.rs`) via `emit_tier3_block`,
|
||||
emitting into the `output` buffer as `OutputKind::System`: a **`Hint`
|
||||
heading** followed by aligned **`What:` / `Example:` / `Concept:`** lines
|
||||
(labels + heading from `hint.block.*`). The `concept` line is muted
|
||||
(`OutputStyleClass::Hint`); the rest are plain. The block is
|
||||
**persistent** (scrolls in the journal), unlike the transient ambient
|
||||
panel — pressing F1 is an explicit request to *keep* the deeper guidance
|
||||
on screen. Its rendered shape is locked by an `insta` snapshot
|
||||
(`hint_block_insert`). The bottom keybinding strip (ADR-0051) advertises
|
||||
F1 in the editing (leading) and default states.
|
||||
|
||||
### D5 — "Most recent (runtime) error" state
|
||||
|
||||
The **runtime-error route** (submitted `hint`, and empty-input F1) needs
|
||||
to map the last runtime error back to its `hint.err.<class>` key. Runtime
|
||||
errors today live only as rendered text in the `output` buffer. We add a
|
||||
single small piece of `App` state — **`last_error_hint_key:
|
||||
Option<String>`** — set at the `translate_error` call sites
|
||||
(`runtime.rs:2615`, `app.rs:2424`) when a friendly error is rendered,
|
||||
cleared when a later command succeeds. Absent → the "getting started"
|
||||
pointer.
|
||||
|
||||
The **pre-submit-diagnostic route** (the F1 live-input path reading the
|
||||
under-cursor diagnostic) is **deferred** — see the scope note in D6.
|
||||
|
||||
### D6 — Content scope for v1
|
||||
|
||||
v1 ships tier-3 content for the **command forms and runtime error
|
||||
classes** — comprehensive for those (the graceful tier-2 fallback below
|
||||
is a safety net, not the plan):
|
||||
|
||||
- **~37 command forms** — every distinct node in `REGISTRY` gets its own
|
||||
`hint.cmd.<hint_id>` block (app + DSL + DDL + advanced-mode SQL forms),
|
||||
each with a **mode-correct example** (the advanced-SQL forms show SQL
|
||||
syntax, their simple siblings show DSL — no sharing).
|
||||
- **9 runtime error classes** — `unique`, `foreign_key` (child/parent
|
||||
side), `not_null`, `check`, `type_mismatch`, `not_found`,
|
||||
`already_exists`, `generic`, `invalid_value` — each gets a
|
||||
`hint.err.*` block.
|
||||
|
||||
**Deferred — the ~33 `diagnostic.*` pre-submit classes and the F1
|
||||
diagnostic route** *(Phase C scope decision, 2026-06-15; issue #38)*. The
|
||||
original "comprehensive" scope included them, but implementation revealed
|
||||
`Diagnostic` (`walker/outcome.rs`) carries only its rendered `message`,
|
||||
not its class key — so a live diagnostic can't be mapped to
|
||||
`hint.err.<class>` without adding a `class` field threaded through every
|
||||
diagnostic-creation site (a broad change). Weighed against the value, it
|
||||
isn't worth it for v1: pre-submit diagnostics are already surfaced by
|
||||
tier-2 (ambient message + validity indicator, ADR-0027); F1 still shows
|
||||
the useful command block when a diagnostic is present; and many
|
||||
diagnostic classes duplicate runtime classes already covered
|
||||
(`type_mismatch`, `unknown_table`↔`not_found`, arity↔`invalid_value`).
|
||||
Deferred to issue #38, additively (the keying doesn't lock it out).
|
||||
|
||||
The full enumerated checklist is the implementation plan's tracking
|
||||
artifact (see *Content inventory*, below).
|
||||
|
||||
**Fallback (safety net):** if a tier-3 key is ever missing at runtime,
|
||||
the surface degrades to tier 2 — the ambient prose for the command path,
|
||||
or the verbose error `hint:` for the error path — never to a blank or an
|
||||
error. The `keys.rs` build-time validation keeps the corpus honest, so a
|
||||
missing key is caught in tests, not in front of a student.
|
||||
|
||||
### D7 — Authoring process: exemplars-first
|
||||
|
||||
Because the corpus is large and its *voice* is a pedagogical decision the
|
||||
maintainer owns, content is produced in two stages:
|
||||
|
||||
1. This ADR carries **2–3 worked exemplars** (below) as the canonical
|
||||
style reference. The `/runda` review of this ADR is where the voice and
|
||||
depth are approved.
|
||||
2. Once approved, the remaining blocks are authored to that template in
|
||||
**reviewable batches** (grouped by area: DDL, DML, app commands,
|
||||
error classes), not one monolithic drop.
|
||||
|
||||
### Exemplars (the style reference; shipped as the rendered format)
|
||||
|
||||
**Command (F1 live-input), `insert`** (the rendered shape, locked by the
|
||||
`hint_block_insert` snapshot — a `Hint` heading + aligned labels, no
|
||||
`Next:` line since tier-2 owns position-awareness):
|
||||
|
||||
```
|
||||
Hint
|
||||
What: Add one or more rows to a table.
|
||||
Example: insert into Customers values ('Ann', 'ann@example.io')
|
||||
Concept: A row is one record; each value lines up with a column, in
|
||||
order. Columns typed serial/shortid fill themselves — leave
|
||||
them out.
|
||||
```
|
||||
|
||||
**Error (`hint` command), foreign-key child-side violation:**
|
||||
|
||||
```
|
||||
Hint
|
||||
What: The value you gave for the child column doesn't match any
|
||||
parent row, so the foreign key has nothing to point at.
|
||||
Example: First insert the parent (insert into Customers …), then the
|
||||
child that references it.
|
||||
Concept: A foreign key is a promise that every child points at a real
|
||||
parent, so the parent must exist first. To allow orphans on
|
||||
delete instead, set the relationship's `on delete` to
|
||||
`set null` or `cascade`.
|
||||
```
|
||||
|
||||
**Command (F1 live-input), `add 1:n relationship`:**
|
||||
|
||||
```
|
||||
Hint
|
||||
What: Link two tables so a parent row can own many child rows.
|
||||
Example: add 1:n relationship from Customers.id to Orders.customer_id
|
||||
Concept: The "1:n" means one parent, many children. The child column
|
||||
holds the foreign key; `--create-fk` adds it for you if it
|
||||
doesn't exist yet.
|
||||
```
|
||||
|
||||
## Forks (all user-chosen, 2026-06-14)
|
||||
|
||||
- **Trigger model:** both a keybinding (live input) and a submitted
|
||||
command (last error), rather than command-only or keybinding-only — the
|
||||
live-input path is the most useful, but the command completes the A1
|
||||
slot and serves the error case.
|
||||
- **Keybinding = F1:** the universal help convention; the key is
|
||||
genuinely free (no `KeyCode::F(1)` binding exists today — the `"F1"`
|
||||
strings in `input_render.rs`/tests are scenario labels, not the key, and
|
||||
ADR-0022 uses no `F1` requirement label). No collision with the ADR-0049
|
||||
readline keys, `Ctrl-O` (ADR-0046), `Esc`-clear, or the reserved
|
||||
`Ctrl-C` cancel (I5). Rejected: `?` (a typeable character — fiddly
|
||||
position-dependent handling) and a Ctrl/Alt chord (less discoverable, no
|
||||
advantage).
|
||||
- **No topic argument:** contextual only; `help <topic>` already owns
|
||||
explicit reference lookup.
|
||||
- **Comprehensive content for v1:** the full inventory, not a starter
|
||||
subset.
|
||||
- **Exemplars-first authoring:** lock the voice on a few blocks, then
|
||||
mass-author to template.
|
||||
|
||||
## Consequences
|
||||
|
||||
- **A1 closes.** With `hint` registered and built, all 15 canonical
|
||||
app-level commands exist in both modes.
|
||||
- **A third contextual tier exists.** Students get on-demand, teaching-
|
||||
grade guidance that is deeper than the always-on colour, the headline,
|
||||
the ambient one-liner, and the verbose error hint — without cluttering
|
||||
those terse defaults.
|
||||
- **One new keybinding (F1)** joins the keymap and the ADR-0051 strip.
|
||||
- **A new `hint_ids: &[&str]` field on `CommandNode`** (mirroring
|
||||
`usage_ids`) + a `hint_key_for_input_in_mode` lookup (reusing the
|
||||
`usage_key_for_input_in_mode` form-disambiguation), one new field of
|
||||
`App` state (`last_error_hint_key`), and one new renderer family
|
||||
(`note_hint*`); the `AppCommand` enum gains `Hint`, the grammar a `HINT`
|
||||
node, the REGISTRY one entry.
|
||||
- **A durable content corpus** (~37 command blocks + 10 runtime
|
||||
error-class blocks) enters the catalogue under `hint.cmd.*` /
|
||||
`hint.err.*`, validated by `keys.rs`. This is ongoing surface area: new
|
||||
commands/error classes should ship with their tier-3 hint (a checklist
|
||||
item for future feature ADRs). (Diagnostic-class blocks deferred — #38.)
|
||||
- **Testing:** Tier-1 unit tests for the trigger matrix (F1 with
|
||||
empty/non-empty input; `hint` with/without a recent error;
|
||||
`last_error_hint_key` set on the `translate_error` sites and cleared on
|
||||
success; the mode-aware form resolution; the `:` strip), the
|
||||
command-identification logic, and the tier-2 fallback; Tier-2 `insta`
|
||||
snapshots for a representative rendered hint block; Tier-3 integration
|
||||
tests for the end-to-end flows (type a partial command → F1 → block
|
||||
appears, **buffer and completion memo untouched**; run a failing
|
||||
command → `hint` → error expansion). **A comprehensiveness coverage
|
||||
test** (enforces D6): iterate the REGISTRY and assert every node with a
|
||||
`hint_ids` entry resolves to a `hint.cmd.*` block, and every runtime
|
||||
error class resolves to a `hint.err.*` block — `keys.rs` only checks
|
||||
that *referenced* keys resolve, not that every command/error *has* one,
|
||||
so this test is what makes the scope enforceable rather than
|
||||
aspirational. (Diagnostic classes are out of this scope — D6 / #38.)
|
||||
|
||||
## Out of scope
|
||||
|
||||
- **Per-topic `hint <topic>`** — OOS (rejected): `help <topic>` already
|
||||
serves explicit lookup; a topic arg would overlap it and double the
|
||||
content-authoring surface.
|
||||
- **Re-showing tier-3 inline as the always-on ambient hint** — OOS
|
||||
(rejected): the ambient panel stays terse by design (ADR-0022); tier-3
|
||||
is on-demand. Promoting it would defeat the tiering.
|
||||
- **Localised tier-3 content beyond `en-US`** — OOS (deferred): the
|
||||
catalogue is structured for i18n (ADR-0019), but additional locales
|
||||
follow the project's English-only-for-v1 stance (requirements X2).
|
||||
- **`hint` for a *successful* command's deeper teaching** (e.g. "you just
|
||||
created a table — here's what an index would add") — OOS (deferred): a
|
||||
plausible future tier-3 use, but v1 scopes the command path to errors
|
||||
and the F1 path to in-progress input.
|
||||
- **Clause-concept hints** (`… on delete ⟨action⟩`, constraint slots,
|
||||
`with pk`, cardinality) — OOS (deferred, issue #37): a
|
||||
`hint.concept.<topic>` layer surfaced when the cursor sits in a
|
||||
recognized clause, deeper than tier-2's candidate list but narrower than
|
||||
the per-form block. Per-form keying (D3) does not lock it out. To be
|
||||
tackled as a deliberate follow-up job, not gated on usage statistics.
|
||||
- **Pre-submit-diagnostic route + `diagnostic.*` tier-3 blocks** — OOS
|
||||
(deferred, issue #38): needs a class field on `Diagnostic` threaded
|
||||
through every creation site (broad change) for marginal value, since
|
||||
tier-2 already surfaces diagnostics and many duplicate runtime classes
|
||||
(D6).
|
||||
|
||||
## Content inventory (implementation tracking)
|
||||
|
||||
The implementation plan enumerates and checks off every block:
|
||||
|
||||
- **`hint.cmd.<hint_id>`** — one per distinct `REGISTRY` node (~37), each
|
||||
with its own `hint_id` and a mode-correct example: app (`save`, `save
|
||||
as`, `load`, `new`, `rebuild`, `export`, `import`, `replay`, `undo`,
|
||||
`redo`, `mode`, `messages`, `copy`, `help`, `hint`, `quit`); DDL
|
||||
(`create table`, `create m:n`, `add column`/`relationship`/`index`,
|
||||
`drop`, `rename`, `change column`); DML (`insert`, `update`, `delete`,
|
||||
`show`, `seed`, `explain`, `select`/`with`). The **7 advanced-mode SQL
|
||||
forms** (`SQL CREATE TABLE`, `ALTER TABLE`, `CREATE/DROP INDEX`, `DROP
|
||||
TABLE`, `SQL INSERT/UPDATE/DELETE`, `EXPLAIN SQL`, raw `SELECT`/`WITH`)
|
||||
each get their **own** block with SQL syntax — they do **not** reuse
|
||||
their simple sibling's (this is the `/runda` correction; the parallel
|
||||
`help`-side gap is issue #36).
|
||||
- **`hint.err.*`** — one per runtime error class (`unique`,
|
||||
`foreign_key.{child,parent}_side`, `not_null`, `check`,
|
||||
`type_mismatch`, `not_found`, `already_exists`, `generic`,
|
||||
`invalid_value`). The `diagnostic.*` pre-submit classes are **deferred**
|
||||
(D6 / issue #38).
|
||||
+10
-2
File diff suppressed because one or more lines are too long
@@ -0,0 +1,195 @@
|
||||
# ADR-ci-001: CI + release pipeline on Gitea Actions
|
||||
|
||||
## Status
|
||||
|
||||
**Accepted (2026-06-12); implemented the same day on the `ci` branch.** Every
|
||||
fork below was settled with the user as the pipeline was built, and each stage
|
||||
was verified live before acceptance:
|
||||
|
||||
- a throwaway probe workflow established how the runner executes jobs;
|
||||
- the CI image was built and checked locally (runner contract, warm devShell);
|
||||
- the gate ran green (**clippy clean; 2424 tests pass / 0 fail / 1 intentional
|
||||
ignored doctest**);
|
||||
- the release was exercised end-to-end — tag `v0.0.0-citest2` published a Gitea
|
||||
release carrying the static binary (~10 MB) and its `.sha256`.
|
||||
|
||||
This ADR records the **CI/release pipeline**. The **dev/build environment it
|
||||
runs on** — the nix flake (devShell + reproducible build, pinned Rust 1.95.0)
|
||||
— is **ADR-ci-002** (relocated here from main's ADR-0049); this ADR builds on
|
||||
it rather than restating it.
|
||||
|
||||
> **Namespacing.** Kept in `docs/ci/adr/` (id `ADR-ci-001`), disjoint from
|
||||
> `main`'s integer ADR sequence, mirroring the website subproject's
|
||||
> `docs/website/adr/`. This avoids the cross-branch number collisions that
|
||||
> previously forced website ADRs to be renumbered (see that namespace's
|
||||
> history note and ADR-0000 "Numbering discipline").
|
||||
|
||||
## Amendment — 2026-06-13: D1 matrix (non-macOS)
|
||||
|
||||
§3 (Release) below describes the original **single-target** (x86_64 Linux) job.
|
||||
The release is now a **`test` → `build` matrix** over the four non-macOS D1
|
||||
targets (Linux + Windows × x86_64/aarch64), cross-built with `cargo-zigbuild`.
|
||||
The full decision — tooling, targets, the Windows `synchronization` stub, the
|
||||
matrix shape, and the macOS deferral with its licensing rationale — is recorded
|
||||
in its own record: **[ADR-ci-003](20260613-adr-ci-003.md)**.
|
||||
|
||||
## Context
|
||||
|
||||
The project is near feature-complete and needs CI (`requirements.md` **TT5**;
|
||||
the **CI** item in the deferred list) and a release path for its distributed
|
||||
binaries (**D1**/**D2**/**D3**). The self-hosted Gitea instance
|
||||
(`git.lazyeval.net`) has its Actions runner freshly set up — a first-time
|
||||
in-anger use — with a DinD-capable setup and a reusable `docker-build`
|
||||
template, exercised by a handful of sample workflows.
|
||||
|
||||
The starting constraints, and what the probe found:
|
||||
|
||||
- The runner label is **`ci-public`**. A throwaway probe
|
||||
(`ci-probe.yaml`, since removed) established that **jobs run *inside* a
|
||||
container** — `ghcr.io/catthehacker/ubuntu:act-22.04` by default, as **root**
|
||||
— and therefore the runner *host's* nix is **not** on the steps' PATH
|
||||
(`nix NOT on PATH`, `no /nix`). A custom job `container:` *can* be pulled
|
||||
(it pulled `nixos/nix:latest`), but the runner keeps job containers alive
|
||||
with `entrypoint: /bin/sleep` and runs JS actions (e.g. `actions/checkout`)
|
||||
with `node`, so the container must provide **`sleep` + `bash` + `node`** —
|
||||
a bare `nixos/nix` image has none and fails to start.
|
||||
- The reusable template only does `docker build`; it neither runs a Rust gate
|
||||
nor pushes images nor uploads release assets — so a Rust pipeline can't just
|
||||
call it.
|
||||
- The whole motivation (per the user) is for CI to use the project's **nix
|
||||
flake** for its tools rather than relying on whatever the build machine has
|
||||
— i.e. **one toolchain definition shared by dev and CI**.
|
||||
|
||||
## Decision
|
||||
|
||||
### 1. Toolchain delivery — a baked nix CI image
|
||||
|
||||
CI gets its toolchain from a **purpose-built job-container image**, not from
|
||||
host nix and not by installing nix per-job:
|
||||
|
||||
- **Base `node:22-bookworm-slim`.** Debian slim already provides `bash` +
|
||||
coreutils (`sleep`); the `node` tag adds the actions runtime. This satisfies
|
||||
the act_runner job-container contract at a fraction of the size of the
|
||||
catthehacker runner images (chosen on the user's prompt to avoid those
|
||||
multi-GB images), and far more reliably than a bare `nixos/nix` (which can't
|
||||
start). `.gitea/ci-image/Dockerfile`.
|
||||
- **Single-user nix on top**, flakes enabled, with the **flake's devShell
|
||||
pre-warmed** (`nix develop` realizes nixpkgs + the pinned Rust toolchain +
|
||||
`cargo-sweep` + the musl cc into the store). CI then runs `nix develop -c …`
|
||||
against a warm store — the *same* pinned toolchain as dev (ADR-ci-002),
|
||||
reaching a ready toolchain in ~1.4 s.
|
||||
- **Built + pushed by `build-ci-image.yaml`** via the DinD service to the
|
||||
Gitea container registry as `git.lazyeval.net/<owner>/rdbms-playground-ci`,
|
||||
a **public** package (anonymous pull, no gate-side credentials). It runs only
|
||||
when an image input changes (Dockerfile / `flake.nix` / `flake.lock` /
|
||||
`rust-toolchain.toml`) or on manual dispatch.
|
||||
|
||||
### 2. Gate — `ci.yaml`
|
||||
|
||||
On branch pushes and PRs, a single job runs **inside the CI image**:
|
||||
`nix develop -c cargo clippy --all-targets -- -D warnings` then
|
||||
`nix develop -c cargo test --no-fail-fast`.
|
||||
|
||||
**`fmt` is deliberately not gated.** The tree isn't clean under stock
|
||||
`rustfmt` (~100 files would change; no `rustfmt.toml` is committed) and
|
||||
reformatting would churn blame across the in-flight website branch and ongoing
|
||||
`main` work — so, by user decision, the gate is **clippy + test** and fmt is
|
||||
revisited on `main` (also recorded in ADR-ci-002).
|
||||
|
||||
### 3. Release — `release.yaml`
|
||||
|
||||
On a `v*` tag, one job in the CI image:
|
||||
|
||||
1. **tests** (`cargo test`) — so a tag can never publish untested code, even
|
||||
one pointing at a never-gated commit (user choice over relying solely on the
|
||||
branch gate);
|
||||
2. **builds the static binary** for **`x86_64-unknown-linux-musl`** (D2:
|
||||
single static binary, no runtime deps). The glibc/nix-store build is
|
||||
non-portable; the musl target with `crt-static` is fully static. rusqlite's
|
||||
`bundled` SQLite C is compiled by a **musl `cc`** (`pkgsCross.musl64`) wired
|
||||
into the flake devShell via `CC_<target>` + `CARGO_TARGET_<TARGET>_LINKER`;
|
||||
`[profile.release] strip = "symbols"` trims it (~13 MB → ~10 MB);
|
||||
3. **publishes** the binary + a `.sha256` to a Gitea release via the API and
|
||||
the auto-provided **`GITEA_TOKEN`** — no third-party action (just `curl` +
|
||||
`node`, both in the image).
|
||||
|
||||
### 4. Triggers — branch vs tag hygiene
|
||||
|
||||
- Gate and image-build are scoped to **branch** pushes (`branches: ['**']`).
|
||||
Tag pushes ignore `paths:` filters and would otherwise spuriously rebuild the
|
||||
unchanged image and re-gate an already-gated commit; the branch filter
|
||||
excludes tags. **`release.yaml` owns tags** (`tags: ['v*']`).
|
||||
- Pushing commits + a tag together still gates the commits (via the branch
|
||||
ref) and releases (via the tag ref) — no lost coverage, no duplicate runs.
|
||||
|
||||
### 5. Auth
|
||||
|
||||
- **Image push:** a dedicated PAT with `write:package`, supplied as the
|
||||
`REGISTRY_USERNAME` / `REGISTRY_TOKEN` Actions secrets (the package owner
|
||||
must match the token's user — an `oli`-namespace push with a different user
|
||||
is refused with `reqPackageAccess`).
|
||||
- **Release publish:** the auto `GITEA_TOKEN` (repo/release scope).
|
||||
|
||||
### 6. Scope this iteration — Linux x86_64, step by step
|
||||
|
||||
The user's target is the full **D1** matrix, approached incrementally. This
|
||||
iteration ships **Linux x86_64 only**; the rest is deferred (below).
|
||||
|
||||
## Consequences
|
||||
|
||||
- **One toolchain, dev and CI.** They build through the same flake and cannot
|
||||
drift. New image rebuilds only when the flake/toolchain/Dockerfile change.
|
||||
- **D2 is met on Linux.** The release artifact is a genuinely static,
|
||||
stripped musl binary that runs with no runtime dependencies.
|
||||
- **DinD is per-job (no layer cache across runs),** so every `build-ci-image`
|
||||
run rebuilds from scratch (~6 min). Acceptable at its trigger frequency;
|
||||
base-pull caching via the `dind-cached` proxy variant is a possible later
|
||||
optimisation.
|
||||
- **The CI image is ~5.5 GB+** (the Rust toolchain closure, now also musl).
|
||||
Pulled once per runner and cached; slimming (multi-stage, prune) is optional.
|
||||
- **Every gate run recompiles the full dependency graph** (warm *toolchain*,
|
||||
cold *deps*; clippy and test don't share artifacts), ~2 min total. Fine for
|
||||
now; dependency/`target` caching is a deferred speed item.
|
||||
- **`GITEA_TOKEN` must retain release scope;** if an instance policy narrows
|
||||
it, the release publish falls back to a repo-scoped PAT secret.
|
||||
|
||||
## Alternatives considered
|
||||
|
||||
- **Run on the runner host's nix.** Rejected — the probe showed steps run in a
|
||||
container where host nix is unreachable.
|
||||
- **Install nix per-job in the default image.** Works but cold every run
|
||||
(slow) and throwaway once the image exists; rejected in favour of the baked
|
||||
image.
|
||||
- **`catthehacker` or bare `nixos/nix` as the base.** catthehacker is a
|
||||
multi-GB runner emulation we don't need; bare `nixos/nix` lacks
|
||||
`sleep`/`bash`/`node` and won't start. `node:22-bookworm-slim` is the small,
|
||||
contract-satisfying middle (user's suggestion).
|
||||
- **A standard `rust:1.95` CI image instead of the flake.** Simpler in CI but a
|
||||
*second* toolchain definition (drift) — counter to the unify-with-dev goal.
|
||||
- **A third-party Gitea release action.** Avoided; the API + auto token keep
|
||||
the release self-contained and debuggable.
|
||||
|
||||
## Deferred / out of scope (tracked, step by step)
|
||||
|
||||
- **D1 matrix:** **macOS only** now (x86_64 + aarch64). The four non-macOS
|
||||
targets shipped via cargo-zigbuild (see the 2026-06-13 amendment); macOS needs
|
||||
Apple's SDK (osxcross + private SDK, or a Mac runner).
|
||||
- **D3 packaging:** Homebrew / Scoop / winget / `cargo-binstall` manifests
|
||||
(and binstall-friendly asset naming/archives).
|
||||
- **Tier 4 (PTY E2E):** still unwired (`requirements.md` **TT4**); the gate runs
|
||||
tiers 1–3 only, so **TT5** ("CI runs all tiers on Linux/macOS/Windows") is
|
||||
partially met — Linux, tiers 1–3.
|
||||
- **CI speed:** dependency/`target` caching (cargo-chef into the image, or
|
||||
`actions/cache`), and image slimming / `dind-cached` base-pull caching.
|
||||
- **Website deploy:** the static site → Cloudflare via Gitea Actions (a
|
||||
separate, simpler workflow on the website branch).
|
||||
- **fmt gate:** revisit on `main` once a `rustfmt` style is chosen.
|
||||
|
||||
## Relationship to other decisions
|
||||
|
||||
- **Builds on ADR-ci-002** (nix flake dev + build env). This ADR adds the
|
||||
musl-target/cc to that flake and consumes it from CI.
|
||||
- **Advances `requirements.md`:** **TT5** (CI runs the tiers — Linux, 1–3),
|
||||
**D2** (static binary — Linux, done), **D1**/**D3** (partial/deferred).
|
||||
- **Mirrors the website subproject's** separate ADR namespace and its
|
||||
static→Cloudflare-via-Gitea-Actions deployment posture (ADR-website-001).
|
||||
@@ -0,0 +1,135 @@
|
||||
# ADR-ci-002: Nix flake for a reproducible dev + build environment
|
||||
|
||||
## Status
|
||||
|
||||
**Accepted (2026-06-12).** Implemented the same day on the `ci` branch:
|
||||
`flake.nix`, `flake.lock`, `rust-toolchain.toml`, `.envrc`. Verified
|
||||
end-to-end before acceptance — `nix develop` provides the pinned
|
||||
toolchain; `nix build .#default` produces a working binary; `cargo
|
||||
clippy --all-targets -- -D warnings` is clean and `cargo test` is
|
||||
**2424 passed / 0 failed / 1 ignored** (the ignored item is the
|
||||
intentional ```` ```ignore ```` doctest at `src/friendly/mod.rs:21`),
|
||||
all run *through the flake*. This ADR is the dev/build-environment
|
||||
foundation; the CI **pipeline** that consumes it (runner model, image,
|
||||
gate, release) is **ADR-ci-001**.
|
||||
|
||||
> **History.** Created as **ADR-0049** in `main`'s integer ADR namespace
|
||||
> (`docs/adr/`); moved here to **ADR-ci-002** on 2026-06-12 to keep the
|
||||
> CI/dev-env decisions out of `main`'s sequence and end the cross-branch
|
||||
> number collision (`main` independently reaches for the next integer too —
|
||||
> the same problem the website subproject hit). Content is otherwise
|
||||
> unchanged. See ADR-0000 "Numbering discipline".
|
||||
|
||||
## Context
|
||||
|
||||
The project is near feature-complete and CI is finally being set up
|
||||
(`requirements.md` **TT5**, **CI** in the deferred list). CI must not
|
||||
depend on whatever Rust/toolchain happens to be installed on the build
|
||||
machine — that is neither reproducible nor honest about what the build
|
||||
needs.
|
||||
|
||||
The sibling project **datamage** already solved this with a Nix flake
|
||||
(its ADR 0046): the flake is the single, version-pinned declaration of
|
||||
the toolchain, and both the dev shell and CI go through it so they
|
||||
cannot drift. We adopt the same pattern here. Ours is dramatically
|
||||
simpler than datamage's — this is a pure-Rust TUI with no Tauri /
|
||||
WebKitGTK / Node / WASM surface — so the flake carries almost no system
|
||||
dependencies.
|
||||
|
||||
Two build facts drove the (tiny) dependency set, confirmed from
|
||||
`Cargo.lock`:
|
||||
|
||||
- **`libsqlite3-sys` is built with `bundled`** → SQLite is compiled
|
||||
from vendored C, which needs a C compiler. `nixpkgs`' `stdenv`
|
||||
provides one automatically; nothing is declared for it.
|
||||
- **`arboard`'s clipboard backend is `x11rb`** — a pure-Rust socket
|
||||
XCB client that links *no* C X11 libraries. So no X11/`pkg-config`
|
||||
system inputs are needed to build or test. A live X server is only
|
||||
required at *runtime* to actually copy; headless sessions fall back
|
||||
to OSC 52.
|
||||
|
||||
## Decision
|
||||
|
||||
Adopt a **Nix flake** at the repository root as the canonical
|
||||
declaration of the dev *and* build environment.
|
||||
|
||||
- **`flake.nix`** exposes two outputs (user-chosen 2026-06-12 over a
|
||||
dev-shell-only variant):
|
||||
- **`devShells.default`** — the pinned Rust toolchain (from
|
||||
`rust-toolchain.toml` via `rust-overlay`) plus `cargo-sweep` for
|
||||
the `target/` build-hygiene discipline (CLAUDE.md / the datamage
|
||||
ADR 0050 equivalent).
|
||||
- **`packages.default`** (= `packages.rdbms-playground`) — a
|
||||
`rustPlatform.buildRustPackage` that produces the binary
|
||||
reproducibly from the pinned toolchain and the committed
|
||||
`Cargo.lock` (`cargoLock.lockFile` → `importCargoLock`, which
|
||||
fetches each dependency by its lockfile checksum: offline,
|
||||
deterministic, no `cargoHash` to churn). `nix build` yields the
|
||||
artifact CI's gate/release can consume.
|
||||
- **`rust-toolchain.toml`** pins an **exact stable release**
|
||||
(`1.95.0`), not the floating `stable` channel, so `nix flake update`
|
||||
cannot surprise-bump Rust into new clippy lints that would fail the
|
||||
`-D warnings` gate (same reasoning as datamage ADR 0046). Components:
|
||||
`rustfmt` + `clippy`. No coverage/WASM tooling and no
|
||||
cross-compilation targets yet — those are added when the release
|
||||
matrix needs them, not before.
|
||||
- **`flake.lock`** pins every input (`nixpkgs` `nixos-26.05`,
|
||||
`rust-overlay`, `flake-utils`) to a commit, making the env
|
||||
bit-reproducible.
|
||||
- **`.envrc`** contains `use flake` for direnv auto-activation, kept
|
||||
for parity with datamage even though direnv is not installed on the
|
||||
current dev VM (entry is via `nix develop`).
|
||||
- **`packages.default` sets `doCheck = false`.** The test suite is
|
||||
*not* run during `nix build` — the Nix build sandbox has no `HOME`
|
||||
and no X server, which fights the project-directory / clipboard
|
||||
paths the tests touch. Tests run as their own CI stage via
|
||||
`nix develop -c cargo test`, keeping "build the artifact" and "run
|
||||
the suite" cleanly separate.
|
||||
- **The package version is read from `Cargo.toml`** via
|
||||
`builtins.fromTOML`, so it never drifts from the crate metadata.
|
||||
|
||||
## Consequences
|
||||
|
||||
- **One toolchain definition.** Dev and CI share the exact pinned
|
||||
toolchain; they cannot drift. New contributors run `nix develop`
|
||||
(or get auto-activation via direnv) and have the same Rust as CI.
|
||||
- **D2 (static binary) is unaffected and still pending.** The
|
||||
`nix build` artifact links the Nix-store glibc *dynamically* — it is
|
||||
a reproducible build/test artifact, **not** the single static
|
||||
release binary D2 calls for. Release binaries will target a static
|
||||
toolchain (e.g. `x86_64-unknown-linux-musl`) in the forthcoming CI
|
||||
release work; that is a release-step concern, not a dev-shell one.
|
||||
- **`fmt` is deliberately *not* gated yet.** The tree is not clean
|
||||
under stock `rustfmt` (~100 files would change; no `rustfmt.toml` is
|
||||
committed and the code was shaped by something other than default
|
||||
`rustfmt`). Reformatting churns blame across every file and would
|
||||
conflict with the in-flight website branch and ongoing `main` work,
|
||||
so — user decision 2026-06-12 — the `fmt` gate is left out for now
|
||||
and revisited on `main`. The CI gate is `clippy` + `test`.
|
||||
- **Engine-name posture (CLAUDE.md) is respected.** The flake's
|
||||
comments may name SQLite/`rusqlite` where technically necessary
|
||||
(build-input rationale); no user-facing string is affected.
|
||||
|
||||
## Alternatives considered
|
||||
|
||||
- **Dev-shell only (no build package).** Matches datamage exactly; CI
|
||||
would `cargo build` inside `nix develop -c`. Rejected (user choice):
|
||||
a `nix build` package gives a reproducible release artifact straight
|
||||
from the pinned toolchain, which the release job wants.
|
||||
- **A standard `rust:1.95` image in CI, flake for dev only.** Simpler
|
||||
in CI (no nix-in-CI caching to solve), but it is a *second* place
|
||||
that defines the toolchain — exactly the drift this ADR exists to
|
||||
prevent. Rejected for the unified-env goal; the nix-in-CI caching
|
||||
cost is solved in the CI pipeline work instead.
|
||||
- **`rustup` on the build machine.** The status quo CI would replace —
|
||||
non-reproducible, machine-dependent, the thing we are eliminating.
|
||||
|
||||
## Relationship to other decisions
|
||||
|
||||
- Mirrors **datamage ADR 0046** (nix flake dev env) and its build
|
||||
hygiene companion. This is the rdbms-playground analogue, scoped to
|
||||
a pure-Rust project.
|
||||
- Feeds **ADR-ci-001** (the CI + release pipeline), which consumes this
|
||||
flake for `requirements.md` **TT5** (CI runs the tiers) and the
|
||||
**D1/D2/D3** distribution items (the release uses a static musl target
|
||||
built through this flake).
|
||||
@@ -0,0 +1,195 @@
|
||||
# ADR-ci-003: Cross-platform release builds (the D1 matrix)
|
||||
|
||||
## Status
|
||||
|
||||
**Accepted (2026-06-13); implemented the same day on the `ci` branch.** Every
|
||||
fork was settled with the user. Verified end-to-end:
|
||||
|
||||
- all four targets cross-build locally from Linux x86_64;
|
||||
- the Linux binaries are statically linked (D2); the Windows artifacts are
|
||||
valid PE32+ (x86-64 / Aarch64);
|
||||
- a real release-matrix run (tag `v.0.0.0-citest3`) published **8 assets** — the
|
||||
four binaries + a `.sha256` each.
|
||||
|
||||
**Runtime-verified (2026-06-13, by the user):** the **Linux x86_64** and
|
||||
**Windows aarch64** binaries launch and run correctly — one of each OS family
|
||||
and both architectures. The remaining two (**Linux aarch64**, **Windows
|
||||
x86_64**) are link-clean and valid format but not yet runtime smoke-tested.
|
||||
|
||||
This ADR records the **cross-platform build strategy**; it sits on top of
|
||||
**ADR-ci-002** (the nix flake, which now carries the cross toolchain) and
|
||||
**ADR-ci-001** (the pipeline, whose release job this fills in).
|
||||
|
||||
## Amendment — 2026-06-14: macOS implemented (closes D1)
|
||||
|
||||
macOS is no longer deferred. The two `*-apple-darwin` targets now build on a
|
||||
**Tart (Apple-Silicon) macOS runner** registered to Gitea — building on **real
|
||||
Apple hardware** makes the SDK fully licensed, so the whole osxcross / SDK
|
||||
grey-area + public-image-redistribution problem (§5 below) simply **does not
|
||||
arise**. With all six D1 targets producing artifacts, **D1 is complete.**
|
||||
|
||||
Details, all verified on the runner via a throwaway smoke-test before wiring the
|
||||
release leg:
|
||||
|
||||
- **`release-macos.yaml`** — `workflow_dispatch` with a `tag` input,
|
||||
`runs-on: macos`. The runner registered as `macos:host`, but `:host` is
|
||||
act_runner's execution-backend schema (run on host, no container), **not** part
|
||||
of the label, so the label is `macos`. Steps: `cargo test` (macOS gets the only
|
||||
automated test coverage outside the Linux gate — user choice) → build both
|
||||
darwin targets natively through the flake (`apple-sdk` added to the devShell so
|
||||
the toolchain links AppKit) → **upload to the same release** via the idempotent
|
||||
create-or-get.
|
||||
- **De-nix + re-sign.** The darwin stdenv bakes a `/nix/store` `libiconv` load
|
||||
path into the binary (the *only* non-system dependency; everything else is
|
||||
AppKit/Foundation/CoreGraphics/IOKit + `libSystem`/`libobjc`). The release step
|
||||
rewrites it to `/usr/lib/libiconv.2.dylib` with `install_name_tool` and
|
||||
**re-signs ad-hoc** (`codesign -f -s -`) — `install_name_tool` invalidates the
|
||||
signature and Apple Silicon refuses an unsigned binary. A guard fails the build
|
||||
if any `/nix/store` path remains. Result: portable, signed binaries (the native
|
||||
one was confirmed to launch).
|
||||
- **Dispatch-only, intermittent runner.** The Mac isn't always on, so macOS is a
|
||||
separate dispatched workflow (not a job in `release.yaml`) — a release always
|
||||
carries the four Linux/Windows assets regardless of the Mac, and the two macOS
|
||||
assets are added by dispatching `release-macos` for that tag. **Caveat:** Gitea
|
||||
exposes `workflow_dispatch` only for workflows on the **default branch**, so
|
||||
`release-macos` becomes triggerable once the CI work is merged to `main`.
|
||||
- **Cache hygiene (host-execution runner).** The runner wipes the workspace each
|
||||
run, so cargo `target/` never accumulates; the persistent cache is the nix
|
||||
store, bounded by **generation** — record the current devShell in a persistent
|
||||
profile, keep the 2 newest generations (`nix-env --delete-generations +2`),
|
||||
reclaim the rest. (The first sweep reclaimed a ~3.8 GB one-time backlog of
|
||||
build scaffolding — source + build-only deps, not re-installed toolchains.)
|
||||
- **D2 on macOS.** macOS binaries cannot be fully static (`libSystem` is always
|
||||
dynamic); "no runtime deps" there means *system libraries only*, which the
|
||||
de-nix step guarantees.
|
||||
|
||||
## Context
|
||||
|
||||
`requirements.md` **D1** asks for binaries on **Linux, macOS, Windows × x86_64
|
||||
and aarch64** (six targets); **D2** asks for a **single static binary, no
|
||||
runtime deps**. The CI runner executes jobs in a **Linux x86_64** container
|
||||
(ADR-ci-001), so every target is **cross-compiled from Linux**.
|
||||
|
||||
What's feasible is decided almost entirely by one dependency — **`arboard`**
|
||||
(the clipboard backend for the `copy` command). Its per-platform backends in
|
||||
`Cargo.lock`:
|
||||
|
||||
| Target family | arboard backend | Needs a platform SDK to cross-link? |
|
||||
|---|---|---|
|
||||
| Linux x86_64 / aarch64 | `x11rb` (pure Rust) | No |
|
||||
| Windows x86_64 / aarch64 | `clipboard-win` + `windows-sys` (import libs bundled) | No |
|
||||
| **macOS x86_64 / aarch64** | **`objc2-app-kit` → links AppKit** | **Yes — Apple's SDK** |
|
||||
|
||||
So **four targets cross-compile with no SDK**; **macOS is the hard wall** —
|
||||
AppKit can only be linked against Apple's SDK.
|
||||
|
||||
## Decision
|
||||
|
||||
### 1. Tooling — `cargo-zigbuild`
|
||||
|
||||
Cross-compile with **`cargo-zigbuild`** (Zig's bundled clang + libc as a single
|
||||
universal cross `cc`/linker), added to the flake devShell alongside `zig`. One
|
||||
tool serves every non-macOS target, **including the `cc`-crate compile of
|
||||
rusqlite's bundled SQLite C**, with no per-target toolchain. It replaced the
|
||||
earlier single-target musl `cc` (ADR-ci-002's first cut).
|
||||
|
||||
### 2. Targets this iteration — the four non-macOS
|
||||
|
||||
Added to `rust-toolchain.toml` and the release matrix:
|
||||
|
||||
- **`x86_64-unknown-linux-musl`**, **`aarch64-unknown-linux-musl`** — musl +
|
||||
`crt-static`, so **fully static** portable binaries (D2);
|
||||
- **`x86_64-pc-windows-gnu`**, **`aarch64-pc-windows-gnullvm`** — Zig statically
|
||||
links its libc, so the `.exe` is **standalone** (no mingw runtime DLLs).
|
||||
|
||||
### 3. The Windows `synchronization` stub
|
||||
|
||||
Rust's `std` links **`-lsynchronization`** (its `WaitOnAddress`-based thread
|
||||
parking). That import library is normally supplied by Rust's `rust-mingw`
|
||||
"self-contained" component — which **rust-overlay does not ship** — and Zig's
|
||||
mingw doesn't carry it either, so the link fails with *"unable to find dynamic
|
||||
system library 'synchronization'"*. The functions (`WaitOnAddress`,
|
||||
`WakeByAddress*`) are **forwarded by `kernel32`** (already linked), so an
|
||||
**empty stub** `libsynchronization.a` (committed at **`ci/winstub/`**, 8 bytes,
|
||||
wired via **`.cargo/config.toml`** for the Windows targets *only*) satisfies the
|
||||
linker without contributing symbols. Host and Linux builds are untouched by it.
|
||||
|
||||
### 4. Workflow shape — test once, then a build matrix
|
||||
|
||||
`release.yaml` is **`test` → `build`**:
|
||||
|
||||
- **`test`** runs once on the host (`cargo test`) — a tag never publishes
|
||||
untested code;
|
||||
- **`build`** is a **matrix over the four targets** (`needs: test`,
|
||||
`fail-fast: false`), each `cargo zigbuild --release --target <triple>`, then
|
||||
packages the binary (`.exe` for Windows) + a `.sha256` and uploads both to the
|
||||
**shared release** via an **idempotent create-or-get** (the first matrix job
|
||||
creates the release; the rest fetch it).
|
||||
|
||||
### 5. macOS — deferred, with rationale
|
||||
|
||||
macOS is **not** in this iteration. `arboard`→AppKit needs the macOS SDK, and:
|
||||
|
||||
- the SDK ships **only inside Xcode**; Apple's license ties its use to
|
||||
**Apple-branded hardware**, so using it on a Linux runner is a **grey area**
|
||||
(widely done, low enforcement, but technically against the terms);
|
||||
- **redistributing** the SDK is a clearer violation — and our **CI image is
|
||||
public**, so the SDK **cannot be baked into it** even if the grey area were
|
||||
accepted; it would have to live in a private store;
|
||||
- the **clean** path is building on **real Apple hardware** (a Mac registered as
|
||||
a Gitea runner, or hosted Mac CI), where the SDK is fully licensed.
|
||||
|
||||
macOS therefore becomes its **own step**, choosing between **(a)** osxcross + a
|
||||
**private** SDK kept out of the public image, or **(b)** a **Mac runner**. The
|
||||
user decides when we get there.
|
||||
|
||||
## Consequences
|
||||
|
||||
- **D1: four of six targets met** from a single Linux runner; **D2 met on
|
||||
Linux** (static musl). Windows `.exe`s are standalone.
|
||||
- **Runtime coverage:** Linux x86_64 + Windows aarch64 confirmed running
|
||||
(user, 2026-06-13); Linux aarch64 + Windows x86_64 are the outstanding
|
||||
runtime checks.
|
||||
- **Each matrix target recompiles from scratch** (~2–4 min; ~10 min total on the
|
||||
single runner), and Zig's per-target libc cache is cold each run. Fine at
|
||||
release frequency; cacheable later if it matters.
|
||||
- **The empty stub depends on `kernel32` forwarding `WaitOnAddress`** (true on
|
||||
Windows 8+), which covers every supported target.
|
||||
- **Asset naming** `rdbms-playground-<tag>-<target>[.exe]` is close to what
|
||||
`cargo-binstall` / the D3 package managers will want.
|
||||
|
||||
## Alternatives considered
|
||||
|
||||
- **`cross` (cross-rs).** Docker-image-per-target; covers Linux + Windows but
|
||||
**not macOS** (no legally redistributable Apple images), and needs DinD
|
||||
orchestration inside our job. Rejected — no macOS, more moving parts than
|
||||
zigbuild.
|
||||
- **Per-target nix cross (`pkgsCross`).** Clean for Linux-musl and
|
||||
Windows-x86_64 (mingw-w64, which *does* ship `libsynchronization.a`), but
|
||||
Windows-aarch64 isn't readily packaged and **macOS-from-Linux is unsupported**
|
||||
in nixpkgs. Rejected — incomplete.
|
||||
- **Native runners per OS.** Cleanest for macOS/Windows, but needs mac/windows
|
||||
runners we don't have. Kept on the table specifically for the deferred macOS
|
||||
step.
|
||||
- **A real `libsynchronization.a`** (from nixpkgs mingw or a `rust-mingw`
|
||||
component) instead of the empty stub. More principled, but more flake
|
||||
machinery, doesn't cover Windows-aarch64, and unnecessary — the stub links
|
||||
clean because the symbols resolve via `kernel32`.
|
||||
|
||||
## Deferred / out of scope
|
||||
|
||||
- ~~**macOS** (x86_64 + aarch64)~~ — **done** via the Tart runner (see the
|
||||
2026-06-14 amendment); §5 below is the as-deferred rationale, kept for history.
|
||||
- **D3 packaging** — Homebrew / Scoop / winget / `cargo-binstall` manifests
|
||||
(and binstall-friendly archive naming).
|
||||
- **CI speed** — caching per-target builds / Zig's libc cache.
|
||||
- **Runtime smoke test** of the two not-yet-checked targets (Linux aarch64,
|
||||
Windows x86_64).
|
||||
|
||||
## Relationship to other decisions
|
||||
|
||||
- **Extends ADR-ci-002** — the flake devShell now carries `cargo-zigbuild` +
|
||||
`zig` and the four release targets.
|
||||
- **Fills in ADR-ci-001 §3 (Release)** — that single-target job is now this
|
||||
matrix.
|
||||
- **Advances `requirements.md`** **D1** (4/6) and **D2** (Linux, done).
|
||||
@@ -0,0 +1,23 @@
|
||||
# CI / Build Architecture Decision Records
|
||||
|
||||
Decision records for the **continuous-integration + release pipeline**
|
||||
subproject — the Gitea Actions workflows under `.gitea/`, the nix CI image,
|
||||
and the release tooling. These are kept in their own namespace, separate
|
||||
from the project-wide ADRs in [`docs/adr/`](../../adr/README.md), so CI
|
||||
decisions never compete with the main global ADR sequence for numbers — the
|
||||
same split the website subproject uses (`docs/website/adr/`, on the `website`
|
||||
branch), and for the same reason (see
|
||||
[ADR-0000 "Numbering discipline"](../../adr/0000-record-architecture-decisions.md)).
|
||||
|
||||
**Numbering.** Files are named `<date>-adr-ci-<NNN>.md` and referenced in
|
||||
prose as `ADR-ci-NNN`. The `<date>` (the ADR's accepted/created day,
|
||||
`YYYYMMDD`) plus the `ci` segment keeps the namespace disjoint from `main`'s
|
||||
integers. Assign the next free `NNN` from this index. Every ADR change
|
||||
updates this index in the same edit (the ADR-0000 index-upkeep rule applies
|
||||
here too).
|
||||
|
||||
## Index
|
||||
|
||||
- [ADR-ci-001 — CI + release pipeline on Gitea Actions](20260612-adr-ci-001.md) — **Accepted 2026-06-12** (implemented the same day on the `ci` branch). Establishes the CI/release pipeline on the self-hosted Gitea instance's Actions runner (`ci-public`). **Runner model** (established by a throwaway probe): jobs execute *inside* a container (`catthehacker/ubuntu:act-22.04` by default), as root, so the runner host's nix is **not** reachable from steps. **Toolchain delivery:** a **baked CI image** — `node:22-bookworm-slim` (satisfies the act_runner job-container contract: `/bin/sleep` keep-alive, `bash`, `node` for JS actions; a bare `nixos/nix` image lacks these and won't start) **+ single-user nix + the flake's devShell pre-warmed** — built by `build-ci-image.yaml` via DinD and pushed to the Gitea container registry as a **public** package, so CI runs `nix develop -c …` against the **same pinned toolchain as dev** (the flake, ADR-ci-002) with a warm store (~1.4 s to a ready toolchain). **Gate** (`ci.yaml`): `clippy -D warnings` + `cargo test` inside that image on branch pushes + PRs; **fmt deliberately not gated** (the tree isn't stock-rustfmt-clean — user decision, revisit on `main`; see ADR-ci-002). **Release** (`release.yaml`): on a `v*` tag, runs the tests, builds the **static `x86_64-unknown-linux-musl` binary** (D2: single static binary, no runtime deps — the glibc/nix build is non-portable), strips it, and publishes it + a `.sha256` to a Gitea release via the API and the auto-provided `GITEA_TOKEN`. **Triggers:** gate + image-build are scoped to **branch** pushes (`branches: ['**']`) so a release tag doesn't spuriously re-run them; the image-build additionally path-filters to its inputs (Dockerfile/flake/toolchain); the release owns tags. **Auth:** a dedicated PAT (`REGISTRY_USERNAME`/`REGISTRY_TOKEN` secrets) pushes the image; the auto `GITEA_TOKEN` publishes releases. **Scope:** the original release job was Linux x86_64 only; it's now the **four non-macOS D1 targets** (Linux + Windows × x86_64/aarch64) cross-built via cargo-zigbuild — see **ADR-ci-003**. macOS, D3 package-manager manifests, CI-speed dependency caching, and the website's static→Cloudflare deploy remain deferred, added step by step. Verified live: probe → runner facts; image built + checked locally; gate green (**2424 tests**); release exercised end-to-end (`v0.0.0-citest2` published with binary + checksum). Builds on **ADR-ci-002** (the nix flake, relocated here from main's ADR-0049 to avoid exactly this cross-branch collision).
|
||||
- [ADR-ci-002 — Nix flake for a reproducible dev + build environment](20260612-adr-ci-002.md) — **Accepted 2026-06-12** (relocated from main's **ADR-0049** on the same day — content unchanged — to keep CI/dev-env decisions out of `main`'s integer sequence). The single, version-pinned declaration of the **dev *and* build toolchain** so CI never relies on whatever Rust is on the build machine — mirroring **datamage ADR 0046**, but far simpler (pure-Rust TUI). Root **Nix flake** with two outputs: **`devShells.default`** (pinned **Rust 1.95.0** via `rust-toolchain.toml` + `rust-overlay`, `cargo-sweep`, and the musl cc for the static release build) and **`packages.default`** (`rustPlatform.buildRustPackage` from the committed `Cargo.lock`; `doCheck = false`). Exact-pin (not floating `stable`) so `nix flake update` can't surprise-bump clippy past the `-D warnings` gate. System inputs near-empty by design (`libsqlite3-sys bundled` → stdenv cc only; `arboard`→`x11rb` pure-Rust). `.envrc` (`use flake`) for direnv parity. Verified through the flake: `nix build` yields a working binary, clippy clean, **2424 tests pass / 0 fail / 1 intentional ignored doctest**. Consumed by **ADR-ci-001** (the pipeline). Alternatives rejected: dev-shell-only; a standard `rust:1.95` CI image (a second toolchain definition = drift); `rustup` on the build host (non-reproducible).
|
||||
- [ADR-ci-003 — Cross-platform release builds (the D1 matrix)](20260613-adr-ci-003.md) — **Accepted 2026-06-13** (implemented + a real matrix release verified the same day — tag `v.0.0.0-citest3` published 8 assets). Cross-compiles the **four non-macOS D1 targets** from the Linux x86_64 runner with **`cargo-zigbuild`** (Zig's bundled clang + libc as one universal cross cc/linker, incl. rusqlite's bundled SQLite C; added to the flake devShell, replacing the single-target musl cc): **`x86_64`/`aarch64-unknown-linux-musl`** (musl + crt-static → fully static, **D2**) and **`x86_64-pc-windows-gnu`** / **`aarch64-pc-windows-gnullvm`** (Zig statically links libc → standalone `.exe`). **Windows `synchronization` stub:** Rust std links `-lsynchronization` (WaitOnAddress thread-parking), an import lib rust-overlay's toolchain doesn't ship and Zig's mingw lacks; the symbols are forwarded by `kernel32`, so an **empty 8-byte stub** `libsynchronization.a` (`ci/winstub/`, wired via `.cargo/config.toml` for the Windows targets only) satisfies the linker. **Workflow:** `release.yaml` = **`test` once (host) → `build` matrix** over the four targets (`needs: test`, `fail-fast: false`); each job packages binary (`.exe` for Windows) + `.sha256` and uploads to the **shared release** via idempotent create-or-get. **macOS** (2026-06-14 amendment) — built natively on a **Tart (Apple-Silicon) runner** (`runs-on: macos`), which makes the SDK fully licensed and dissolves the grey-area/public-image problem; `release-macos.yaml` is **dispatch-only** (intermittent runner; becomes triggerable once CI is on `main`), de-nixes the binary's libiconv load path (`install_name_tool` → `/usr/lib`) + re-signs ad-hoc, and uploads to the tagged release. **D1 complete (all six targets).** Alternatives rejected: `cross` (no macOS, needs DinD), per-target nix cross (Windows-aarch64 unpackaged, macOS-from-Linux unsupported), a real `libsynchronization.a` (more machinery, doesn't cover Windows-aarch64). Runtime-verified by the user (2026-06-13): Linux x86_64 + Windows aarch64 run correctly; Linux aarch64 + Windows x86_64 are the outstanding runtime checks. Builds on ADR-ci-002 (flake) and fills in ADR-ci-001 §3 (Release).
|
||||
@@ -0,0 +1,104 @@
|
||||
# CI subproject handoff — 2026-06-15 (ci-01)
|
||||
|
||||
First handover for the **CI / release subproject** (the `ci` branch). Kept in
|
||||
`docs/ci/handoff/`, a namespace separate from the project's global
|
||||
`docs/handoff/` session sequence so it can't collide with `main`'s numbering —
|
||||
the same split as `docs/ci/adr/`, and needed for the same reason: `main`
|
||||
independently wrote its own **handoff-70** this same day (just as it took
|
||||
**ADR-0049**), which would have collided.
|
||||
|
||||
A dedicated infrastructure session that built the project's **entire CI/CD
|
||||
pipeline** on the self-hosted Gitea Actions runner — from nothing to a live
|
||||
gate plus a six-target cross-platform release. Net: the **CI** /
|
||||
`requirements.md` **TT5** item and **D1**/**D2** are now done; **D3** and a
|
||||
couple of TT5 tails remain. Decisions are recorded in the sibling ADR namespace
|
||||
**`docs/ci/adr/`** (ADR-ci-001/002/003).
|
||||
|
||||
## §1. State at handoff
|
||||
|
||||
**Branch:** `ci` (worktree). **`main` has been merged into `ci`** (commit
|
||||
`138e766`, clean — `ci` and `main` touched disjoint files) so the gate runs
|
||||
against current `main` before CI lands there. Working tree clean except the
|
||||
in-progress doc updates from this handoff. Pushes/promotion are the user's
|
||||
step.
|
||||
|
||||
**Gate verified locally on the merged code:** `clippy -D warnings` clean;
|
||||
**`cargo test` 2488 passing / 0 failing / 1 ignored** (the long-standing
|
||||
`friendly` doctest). main's features came in with their tests (2424 → 2488).
|
||||
|
||||
**Pipeline (`.gitea/workflows/`):**
|
||||
|
||||
- `build-ci-image.yaml` — builds + pushes the CI image (`node:22-bookworm-slim`
|
||||
+ single-user nix + the flake's devShell pre-warmed) to the Gitea registry.
|
||||
Triggers only on image-input changes (Dockerfile / flake / toolchain).
|
||||
- `ci.yaml` — the gate: `clippy -D warnings` + `cargo test`, branch pushes + PRs
|
||||
(docs-only changes skipped).
|
||||
- `release.yaml` — on a `v*` tag: `test` → `build` matrix over the **four
|
||||
non-macOS** targets via `cargo-zigbuild`, upload to the Gitea release.
|
||||
- `release-macos.yaml` — **workflow_dispatch** (tag input) on the Tart
|
||||
Apple-Silicon runner (`runs-on: macos`): test → build both `*-apple-darwin`
|
||||
→ de-nix `libiconv` + ad-hoc re-sign → upload.
|
||||
|
||||
**Verified live this session:** the 4-target release published **8 assets**
|
||||
(binary + `.sha256` each) for tag `v.0.0.0-citest3`; the macOS build was proven
|
||||
portable (system-only deps) + signed + launches on the runner.
|
||||
|
||||
## §2. What was built (and the non-obvious bits)
|
||||
|
||||
- **Nix flake** (ADR-ci-002, relocated from a would-be `main` ADR-0049): one
|
||||
pinned toolchain (`1.95.0`) for dev *and* CI; `cargo-zigbuild` + `zig` (Linux
|
||||
only) for the cross targets; `apple-sdk` on darwin.
|
||||
- **Runner facts** (ADR-ci-001): jobs run *inside* a container (`ci-public` →
|
||||
`catthehacker/ubuntu`), so host nix is unreachable — hence the baked image.
|
||||
The Mac runner is **host execution**; its label is `macos` (`:host` in the
|
||||
registration is the act_runner backend, not part of the label).
|
||||
- **Cross-compile** (ADR-ci-003): `cargo-zigbuild` for the 4 non-macOS targets.
|
||||
Windows needs an **empty `libsynchronization.a` stub** (`ci/winstub/`, wired
|
||||
via `.cargo/config.toml`) — std links `-lsynchronization`, absent from
|
||||
rust-overlay's toolchain + zig's mingw, but forwarded by `kernel32`.
|
||||
- **macOS** (ADR-ci-003 amendment): built on **real Apple hardware** (Tart), so
|
||||
the SDK is fully licensed — no osxcross grey area. The darwin stdenv bakes a
|
||||
`/nix/store` `libiconv` path into the binary; the build rewrites it to
|
||||
`/usr/lib/libiconv.2.dylib` (`install_name_tool`) and re-signs ad-hoc
|
||||
(`codesign -f -s -`; `install_name_tool` invalidates the signature, arm64
|
||||
refuses unsigned). A guard fails the build on any remaining `/nix/store` dep.
|
||||
- **Cache hygiene (Mac):** the runner wipes the workspace each run, so cargo
|
||||
`target/` never accumulates; the persistent nix store is bounded by
|
||||
**generation** (record the devShell in a persistent profile, keep the 2
|
||||
newest via `nix-env --delete-generations +2`, GC the rest). First sweep
|
||||
reclaimed a ~3.8 GB one-time backlog of build scaffolding (source + build-only
|
||||
deps, *not* re-installed toolchains).
|
||||
|
||||
## §3. Immediate next steps (user)
|
||||
|
||||
1. **Push `ci`** → the gate re-runs in CI (should be green; no image rebuild —
|
||||
the merge didn't touch the flake/Dockerfile).
|
||||
2. **Promote:** `git checkout main && git merge ci` — a **fast-forward** (`ci`
|
||||
already contains `main`) — then push `main`. CI goes live; `release-macos`
|
||||
becomes dispatchable (workflow_dispatch needs the default branch).
|
||||
3. **First real release:** tag `v0.1.0` (auto-builds the 4 Linux/Windows
|
||||
assets), then **dispatch `release-macos` for `v0.1.0`** with the Mac up (adds
|
||||
the 2 macOS assets) → a full 6-binary release.
|
||||
4. **Cleanup:** delete the `v.0.0.0-citest*` test tags + their releases.
|
||||
5. **Runner-side:** add `min-free`/`max-free` to the Mac's `/etc/nix/nix.conf`
|
||||
as a hands-off nix-store backstop.
|
||||
|
||||
## §4. Known gaps / follow-ups
|
||||
|
||||
- **Versioning is not wired into the binary** (flagged by the user). The release
|
||||
**git tag is nowhere in the produced binary** — there is no `--version` flag,
|
||||
no `CARGO_PKG_VERSION` use anywhere in `src/`, and the release workflows use
|
||||
the tag only for the *release name* + *asset filenames*
|
||||
(`rdbms-playground-<tag>-<target>`). `Cargo.toml` is a static `version =
|
||||
"0.1.0"`, decoupled from the tag. So a `v0.5.0` tag yields a `…-v0.5.0-…`
|
||||
asset whose binary knows nothing of "0.5.0". To fix later: add a `--version`
|
||||
flag, and inject the tag at build time (e.g. a `build.rs` reading a
|
||||
CI-provided env, or bumping `Cargo.toml` as part of tagging) so the binary and
|
||||
the release agree.
|
||||
- **D3 packaging** — Homebrew / Scoop / winget / `cargo binstall` manifests
|
||||
(asset naming is already binstall-friendly).
|
||||
- **TT5 tails** — Windows is build-only (no execution runner); Tier-4 PTY (TT4)
|
||||
is unwired in CI.
|
||||
- **`fmt` gate** — deliberately off (tree isn't stock-`rustfmt`-clean); revisit
|
||||
on `main`.
|
||||
- **Website → Cloudflare** deploy — the separate, simpler workflow, still to do.
|
||||
@@ -0,0 +1,21 @@
|
||||
# CI / Build subproject — session handoffs
|
||||
|
||||
Handover notes for the **CI / release pipeline** work (the Gitea Actions
|
||||
workflows under `.gitea/`, the nix flake, the release tooling). Kept in their
|
||||
own namespace, separate from the project-wide session handoffs in
|
||||
[`docs/handoff/`](../../handoff/), so a CI-branch handoff never competes with
|
||||
`main`'s global handoff sequence for numbers — the same split the CI ADRs use
|
||||
([`docs/ci/adr/`](../adr/README.md)). This is not hypothetical: `main`
|
||||
independently wrote a `handoff-70` the same day this subproject's first handoff
|
||||
was drafted.
|
||||
|
||||
**Numbering.** Files are named `<date>-handoff-ci-<NN>.md` and referenced in
|
||||
prose as `handoff-ci-NN`. Assign the next free `NN` from this index.
|
||||
|
||||
## Index
|
||||
|
||||
- [handoff-ci-01 — the CI/release pipeline build-out](20260615-handoff-ci-01.md)
|
||||
— Gitea Actions gate (clippy + test) + a six-target release (four via
|
||||
`cargo-zigbuild` on a `v*` tag, two macOS via dispatch on a Tart runner), all
|
||||
on a nix flake; decisions in `docs/ci/adr/`. Built on the `ci` branch, merged
|
||||
`main` in, gate green (2488 tests), ready to promote to `main`.
|
||||
@@ -0,0 +1,181 @@
|
||||
# Website-branch handoff — 2026-06-10 (website-1)
|
||||
|
||||
First handoff for the **website** work. This is a **separate sequence** from
|
||||
`main`'s `YYYYMMDD-handoff-NN.md` files — branch-scoped name on purpose, so
|
||||
the two don't collide. Continue numbering these `…-website-handoff-N.md`.
|
||||
|
||||
## State
|
||||
|
||||
- **Branch:** `website`. **HEAD `936d925`.** Not pushed (push is the user's
|
||||
step). Working tree clean.
|
||||
- The website lives in **`website/`** (monorepo; the playground crate is at
|
||||
the repo root). Decisions: **ADR-0044**
|
||||
(`docs/adr/0044-public-website-and-documentation-site.md`). Implementation
|
||||
plan: **`docs/plans/20260604-adr-0044-website.md`**. Living style guide:
|
||||
**`website/STYLE.md`** (read this first — it has the binding conventions
|
||||
and an open-decisions log).
|
||||
|
||||
## Stack & layout
|
||||
|
||||
- **Astro 6 + Starlight + Tailwind v4**, all under `website/`.
|
||||
- `website/astro.config.mjs` — Starlight config (title, 5-section sidebar,
|
||||
Expressive Code `langs`, `server.host: '127.0.0.1'`).
|
||||
- `website/src/grammars/rdbms.mjs` — custom Shiki grammar, **two language
|
||||
ids**: `rdbms` (real commands) and `rdbms-syntax` (abstract templates).
|
||||
- `website/src/styles/global.css` — Starlight↔Tailwind bridge + the `> `
|
||||
command prompt + copy-button hiding (CSS `:has()`).
|
||||
- `website/src/content/docs/` — the five sections.
|
||||
|
||||
## Commands
|
||||
|
||||
```sh
|
||||
cd website
|
||||
pnpm install # node_modules is gitignored — reinstall on a fresh checkout
|
||||
pnpm dev # serves http://127.0.0.1:4321 (see dev-server gotcha below)
|
||||
pnpm build # static dist/, 24 pages, Pagefind search index
|
||||
```
|
||||
|
||||
**Dev-server gotcha (already fixed, don't re-break):** Astro/Vite's default
|
||||
`localhost` bind resolves to IPv6 `::1` here, which breaks SSH
|
||||
`-L 4321:127.0.0.1:4321` tunnels. `server.host: '127.0.0.1'` in the config
|
||||
pins IPv4. Tunnel with `ssh -L 4321:127.0.0.1:4321 <host>`.
|
||||
|
||||
**Verify after changes:** `pnpm build` clean; then from the repo root
|
||||
`grep -rniE '\b(DSL|SQLite|STRICT|rusqlite|PRAGMA)\b' website/src/content/`
|
||||
must be empty; internal links should resolve (build doesn't fail on broken
|
||||
links — no validator installed — so sanity-check by hand or with a small
|
||||
script).
|
||||
|
||||
## Documentation structure (5 sections, autogenerated per directory)
|
||||
|
||||
1. **Getting started** — install, first-project, modes, example-library. **(real)**
|
||||
2. **Using the playground** — command-line-options, the-assistive-editor,
|
||||
the-output-pane, projects, undo-and-history, export-and-import,
|
||||
copy-to-clipboard, getting-help. **(real, grounded)** *This is "the app you
|
||||
drive", distinct from the database-language Reference.*
|
||||
3. **Guides** — build-the-library **(DRAFT — marked; to be iterated for
|
||||
teaching quality before publication)**.
|
||||
4. **Reference** — types **(real)**, tables **(real)**; columns,
|
||||
relationships, indexes, constraints, inserting-and-editing-data,
|
||||
querying-and-inspecting **(STUBS — real syntax synopsis + an "In progress"
|
||||
note; THEY NEED WORKED EXAMPLES — this is the main remaining bulk)**.
|
||||
5. **Concepts** — projects-and-storage **(real)**.
|
||||
- Landing: `index.mdx` splash (feature cards incl. the assistive editor +
|
||||
start-here links).
|
||||
|
||||
## Binding conventions (STYLE.md / ADR-0044 §7)
|
||||
|
||||
- **No "DSL"** in user-facing copy → "simple mode" / "advanced mode".
|
||||
- **No engine name** (SQLite/STRICT/rusqlite/PRAGMA) → "the database" / "the
|
||||
engine".
|
||||
- **Code fences:** simple-mode commands → ` ```rdbms ` (highlighted; gets a
|
||||
decorative copy-safe `> ` prompt via CSS). Abstract syntax templates →
|
||||
` ```rdbms-syntax ` (highlighted, **no** prompt, no copy button). Advanced
|
||||
SQL → ` ```sql `. Shell → ` ```sh `.
|
||||
- **One command per line** in `rdbms` blocks. A multi-line *single* statement
|
||||
(advanced `CREATE TABLE`) goes in ` ```sql `.
|
||||
- **Copy button** is hidden on multi-line `rdbms` blocks and on
|
||||
`rdbms-syntax` (the app input is single-line — a multi-command paste isn't
|
||||
runnable); kept on single-command `rdbms`, and all `sql`/`sh`.
|
||||
- Unshipped features → `:::caution[Planned]` aside; never presented as
|
||||
shipped.
|
||||
- **Ground every page in source** — `parse.usage.*` / `help.*` in
|
||||
`src/friendly/strings/en-US.yaml`, `src/dsl/command.rs`, `src/dsl/types.rs`,
|
||||
the ADRs. **Do not** trust `requirements.md` markers (handoff-59 found
|
||||
~46% mis-marked; it now uses a `[/]` partial legend) — verify against code.
|
||||
|
||||
## Canonical example database (use in every example)
|
||||
|
||||
A small **library**: `authors`(author_id serial pk, name text, birth_year
|
||||
int) · `books`(book_id serial pk, title text, author_id int→authors,
|
||||
published int, isbn text unique) · `members`(member_id serial pk, name text,
|
||||
joined date) · `loans`(loan_id serial pk, book_id int→books, member_id
|
||||
int→members, loaned_on date, returned_on date). 1:n author→books; m:n
|
||||
books↔members via loans. **Simplest examples lead with bare `with pk`** (a
|
||||
default `id` key); the library build uses **named** keys (`author_id`, …) so
|
||||
relationships read clearly.
|
||||
|
||||
## Verified syntax cheat-sheet (don't re-derive)
|
||||
|
||||
- Simple create: `create table <T> with pk [<col>(<type>)[, ...]]` (bare =
|
||||
default `id`); `add column [to] [table] <T>: <name> (<type>)`;
|
||||
`rename column [in] [table] <T>: <old> to <new>`; `change column … (<type>)
|
||||
[--force-conversion|--dont-convert]`; `drop column [from] [table] <T>: <col>
|
||||
[--cascade]`.
|
||||
- Advanced create: `create table T (id serial primary key, …, col int
|
||||
references parent(col))` (verified against `tests/it/sql_create_table.rs`).
|
||||
- Relationship: `add 1:n relationship [as <name>] from <P>.<col> to <C>.<col>
|
||||
[on delete <action>] [on update <action>] [--create-fk]`;
|
||||
compound: `from <P>.(a, b) to <C>.(x, y)`; drop by name or by endpoints.
|
||||
- Data: `insert into T [(cols)] [values] (vals)`; `update T set … (where … |
|
||||
--all-rows)`; `delete from T (where … | --all-rows)`.
|
||||
- Inspect: `show data <T> [where …] [limit n]`, `show table <T>`, `show
|
||||
tables|relationships|indexes`, `show relationship|index <name>`.
|
||||
- `explain <…>` (query plan; safe — never executes). Advanced `select …`.
|
||||
- 10 types: text int real decimal bool date datetime blob serial shortid;
|
||||
advanced-mode SQL aliases (integer/varchar/timestamp/numeric/…).
|
||||
- App commands: save / save as / new / load / rebuild / export [path] /
|
||||
import <zip> [as <t>] / undo / redo / replay <path> / mode / help
|
||||
[<command>] / help types / copy [all|last] / quit. (`hint` and `seed` are
|
||||
NOT implemented — mark planned/omit.)
|
||||
|
||||
## Next work (priority order)
|
||||
|
||||
1. **Fill the 6 Reference stubs** with worked examples on the library schema
|
||||
(the remaining bulk). Each has a syntax synopsis + an "In progress" note —
|
||||
expand to full content: worked example(s), both simple + advanced forms
|
||||
where both apply, cross-links. This is the biggest chunk.
|
||||
2. **Iterate the Guides** for teaching quality; add guides (model a 1:n / m:n,
|
||||
querying with joins). The user flagged guides as the most important
|
||||
didactic content, to be polished before publication.
|
||||
3. **Phase B — landing polish:** use the `frontend-design` skill; set
|
||||
Starlight `site` (production URL) once the domain is known (enables sitemap
|
||||
+ OG/SEO); add a logo + favicon (small Starlight config). Branding palette
|
||||
when the user wants it (staying on Starlight; community themes were
|
||||
surveyed — see ADR-0044 / chat).
|
||||
4. **asciinema casts — DEFERRED until the app is final** (ADR-0044 §2). When
|
||||
starting, settle STYLE.md open-decision #9: scripted-input driver
|
||||
(`asciinema-automation` vs `autocast` — prove with a throwaway test run),
|
||||
`.cast` script format + repo location, terminal geometry, light/dark
|
||||
player theme, file naming. The **assistive editor** is prime cast material
|
||||
(completion / `[ERR]`/`[WRN]` indicator are motion a still block can't
|
||||
show) — earmark a cast for it on the landing + the assistive-editor page.
|
||||
5. Remaining STYLE.md open decisions: **versioning** (leaning single-version
|
||||
for launch) and **SEO/meta** (settle with Phase B + the `site` URL).
|
||||
|
||||
## Process pins
|
||||
|
||||
- **Commits:** user-confirmed (show the message first), **no AI attribution**,
|
||||
**append-only** (no amend/rebase/force-push). Push is the user's step.
|
||||
- **ADR numbering:** assigned at merge-to-`main` (ADR-0000 "Numbering
|
||||
discipline", added this branch). The website ADR is **0044** — renumbered
|
||||
from 0042 on the `main` merge, because `main` had independently used 0042
|
||||
(H1a) and 0043 (compound-FK).
|
||||
- **Issues:** Gitea via `tea` (repo `oli/rdbms-playground` on
|
||||
`git.lazyeval.net`); append `< /dev/null` + `timeout 30`; never raw API.
|
||||
- **Escalate genuine forks**, declare epistemic status, write down the DA pass
|
||||
(`/runda`) on non-trivial plans.
|
||||
|
||||
## Commit history on this branch (newest first)
|
||||
|
||||
```
|
||||
936d925 feat: add "Using the playground" section + Reference skeleton
|
||||
44390e7 feat: simple-mode code-block highlighting, prompt, and copy rules
|
||||
995c0ba docs: reconcile website doc inventory with merged main scope
|
||||
c72c624 chore: bind website dev/preview server to IPv4 loopback (127.0.0.1)
|
||||
9e774b2 docs: ADR numbering discipline — assign numbers at merge-to-main
|
||||
40de389 Merge branch 'main' into website (Gitea migration + ADR renumber)
|
||||
0fcb7b1 docs: website docs structure + first content pages
|
||||
cea99e8 chore: scaffold website (Astro 6 + Starlight + Tailwind v4)
|
||||
1fad29c docs: ADR-0042 — public website + documentation site plan (now ADR-0044)
|
||||
```
|
||||
|
||||
## Review status (what the user has signed off)
|
||||
|
||||
Highlighting / `> ` prompt / copy behavior — good. Voice, altitude,
|
||||
terminology — good. Responsive layout (checked in Polypane) — good. Locked
|
||||
decisions: bare `with pk` leads the simplest examples; copy hidden on
|
||||
multi-command blocks (not per-command copy); the 5-section structure with
|
||||
"Using the playground" near the top; assistive editor surfaced on
|
||||
landing + Getting started. **The 6 Reference stubs have not been reviewed for
|
||||
content** — only their syntax synopses exist.
|
||||
@@ -0,0 +1,205 @@
|
||||
# Website-branch handoff — 2026-06-11 (website-2)
|
||||
|
||||
Second handoff for the **website** work (separate sequence from `main`'s
|
||||
`YYYYMMDD-handoff-NN.md`). Read `website-1` (2026-06-10) first for the
|
||||
original scaffolding context; this note covers everything since.
|
||||
|
||||
## State
|
||||
|
||||
- **Branch:** `website`. **HEAD `e782a28`.** Working tree clean. Pushed
|
||||
through an earlier point; currently **ahead of `origin/website`** (push is
|
||||
the user's step — never push).
|
||||
- The website lives in **`website/`** (monorepo; the playground crate is at
|
||||
the repo root). Living style guide + binding conventions:
|
||||
**`website/STYLE.md`** (read first). Website decisions:
|
||||
**`docs/website/adr/20260604-adr-website-001.md`** (the website ADR namespace
|
||||
— see below). Plan: `docs/website/plans/20260604-website-implementation-plan.md`.
|
||||
|
||||
## What changed since website-1 (commit highlights, newest first)
|
||||
|
||||
```
|
||||
e782a28 feat(website): projects cast (vi-nav load picker) + --demo on all casts
|
||||
927e6b2 Merge branch 'main' (m:n, logging, UI nav, demo overlays, vi-nav)
|
||||
52860c3 feat(website): casts for first-project/modes/undo-redo; quit via Ctrl-C
|
||||
ce153bd docs(website): add SQL queries reference page (advanced query surface)
|
||||
302329d docs(website): record the cast-placement policy in STYLE.md
|
||||
bb7887e feat(website): relationship-diagram cast on the relationships page
|
||||
65a48fa feat(website): joins cast on the querying-with-joins guide
|
||||
c0cc92a docs(website): rewrite Build the library + add Querying with joins guide
|
||||
10655e4 docs(website): fill the six Reference stubs with worked examples + output
|
||||
a8f84c9 feat(website): refine casts — trim shell, autoplay+loop landing, cap size
|
||||
… (cast pipeline, the astro/starlight upgrade, the ADR-namespace move)
|
||||
```
|
||||
|
||||
## ADR namespace (important — avoids the recurring collision)
|
||||
|
||||
Website decision records live in their **own namespace**:
|
||||
`docs/website/adr/` (`<date>-adr-website-<NNN>.md`, id `ADR-website-NNN`),
|
||||
indexed by `docs/website/adr/README.md`. They do **not** draw from `main`'s
|
||||
global ADR integer pool, so a `main` ADR and a website ADR can never collide
|
||||
again (this is why the latest merge of `main`'s ADR-0045/0046/0047 was
|
||||
conflict-free). Recorded in ADR-0000 "Numbering discipline". The main
|
||||
`docs/adr/README.md` intro carries a pointer to the website namespace.
|
||||
|
||||
## Content status
|
||||
|
||||
**Done & verified (build clean, grounded in source, forbidden-terms clean):**
|
||||
- **Getting started** — installation, first-project, modes, example-library.
|
||||
- **Using the playground** — command-line-options, the-assistive-editor,
|
||||
the-output-pane, projects, undo-and-history, export-and-import,
|
||||
copy-to-clipboard, getting-help.
|
||||
- **Guides** — build-the-library (full 4-table build, 1:n + m:n bridge),
|
||||
querying-with-joins.
|
||||
- **Reference** — types, tables, columns, relationships, indexes, constraints,
|
||||
inserting-and-editing-data, querying-and-inspecting, **sql-queries** (the
|
||||
advanced SELECT surface: DISTINCT, GROUP BY/HAVING, set ops, subqueries,
|
||||
CTEs, CASE/CAST/functions, with a "supported subset" boundary note).
|
||||
- **Concepts** — projects-and-storage.
|
||||
- Landing `index.mdx` splash with the quickstart cast.
|
||||
|
||||
**26 pages build clean.** Only expected warning: sitemap needs `site` (Phase B).
|
||||
|
||||
## asciinema casts — the pipeline + the 7 casts
|
||||
|
||||
Pipeline (STYLE.md "asciinema casts", ADR-website-001 §2):
|
||||
- **Driver: `autocast`** (chosen by spike; `asciinema-automation` can't drive a
|
||||
full-screen TUI). Sources in `website/casts-src/casts.mjs`; `pnpm casts`
|
||||
runs `casts-src/generate.mjs` → autocast YAML → `public/casts/<name>.cast`.
|
||||
Command-lists are the durable source; **`.cast` files are regenerable** —
|
||||
re-run `pnpm casts` (needs a `cargo build` binary at `../target/debug`).
|
||||
- **Components:** `Cast.astro` (asciinema-player island) wrapped by
|
||||
`Demo.astro` (the WASM-swap seam, ADR-website-001 §3). Embed via `<Demo
|
||||
src="/casts/NAME.cast" … />` in an **.mdx** page (md can't import).
|
||||
- **Generator features:** trims each cast to the in-app region (drops shell
|
||||
launch + the return-to-shell); ends casts with **Ctrl-C** (`{ key: 'CtrlC' }`)
|
||||
not a typed `quit` (invisible, so the cast ends on the last content frame);
|
||||
per-cast `holdEnd`, `dataDir` (isolated data root, wiped per run), and
|
||||
**`--demo` is default-on** (opt out with `demo:false`).
|
||||
- **The 7 casts:** quickstart (landing, autoplay+loop), assistive-editor,
|
||||
relationship-diagram, joins, modes, undo-redo, **projects** (the new one:
|
||||
save as → new → load via the picker, navigated with `j`).
|
||||
|
||||
### `--demo` (#22 / ADR-0047) is on for ALL casts
|
||||
The demonstration overlay shows a **badge** for special keystrokes
|
||||
(`[ENTER]`, `[TAB]`, arrows, etc.) — plain characters are NOT badged. This
|
||||
makes e.g. the assistive-editor's Tab completion visible (`[TAB]`), and the
|
||||
projects cast's `j`/`k` picker navigation stays *un*surfaced (plain chars) by
|
||||
design. Captions exist too (a stealth `Ctrl+]`-delimited banner) — usable in
|
||||
casts for neutral "point something out" labels, not yet used.
|
||||
|
||||
### ⚠️ Cast tooling limits (don't rediscover these)
|
||||
- autocast can only send **single characters, ASCII control codes (`^X`), and
|
||||
waits** — **NO arrows / PageUp/PageDown / Home/End / function keys** (those
|
||||
are escape sequences; the per-key delay makes the terminal read a lone Esc —
|
||||
verified). So any interaction we want to demo must be reachable via typeable
|
||||
keys. This is why #24 (vi `j/k` in the picker) was needed for the projects
|
||||
cast, and why **output-pane scrolling has no cast** (needs PgUp/PgDn).
|
||||
- `Ctrl+]` (caption toggle) and `Ctrl-C` (quit) ARE sendable (`^]`, `^C`).
|
||||
|
||||
### ⚠️ No-advertising constraint (user, 2026-06-11)
|
||||
The docs must **NOT** advertise that the load picker supports **vi keys**, nor
|
||||
that **`Ctrl+]`** is the caption/banner trigger. The `--demo` flag itself MAY
|
||||
be documented lightly as "a teaching helper that shows special keystrokes" —
|
||||
and nothing more. Casts may *use* vi-nav and captions (the viewer sees only the
|
||||
result/banner, not the keystroke), but cast captions must not name `j/k` or
|
||||
`Ctrl+]`.
|
||||
|
||||
## NEXT WORK — priority order
|
||||
|
||||
### 1. Document the features the `main` merge brought (the biggest gap)
|
||||
The merge (`927e6b2`) added app features that are **not yet documented**:
|
||||
|
||||
- **m:n convenience command** — `create m:n relationship …` (C4, **ADR-0045**).
|
||||
The relationships page currently models m:n only via the manual loans-bridge.
|
||||
Document the convenience command (it auto-generates the junction table).
|
||||
Ground in ADR-0045 + `tests/it/m2n.rs` + `tests/typing_surface/create_m2n.rs`
|
||||
for exact syntax. Likely a new section on the **relationships** reference
|
||||
page and/or a mention in the build-the-library guide.
|
||||
- **`--demo` flag** — document on **command-line-options** as a teaching helper
|
||||
that "shows special keystrokes" (per the no-advertising constraint above —
|
||||
do NOT mention badges-for-vi or captions/`Ctrl+]`).
|
||||
- **ADR-0046 UI** — the **schema sidebar** (auto-shows on wide terminals,
|
||||
`Ctrl-O` navigation mode to peek/expand), **responsive two-row input** +
|
||||
horizontal scroll, and the geometry-fixed hint panel. Decide where in *Using
|
||||
the playground* (a new "the schema sidebar" page, or fold into the-output-pane
|
||||
/ the-assistive-editor). Ground in ADR-0046.
|
||||
- FK-message fixes + the X1 logging sweep: **no user-doc impact** (note only).
|
||||
|
||||
Whenever output changed because of the merge, **re-verify any affected static
|
||||
output blocks** (capture-harness recipe below).
|
||||
|
||||
### 2. Consider a final cast re-record sweep + optional captions
|
||||
- All casts re-record with `pnpm casts` once the app is "final".
|
||||
- **Chase up two pacing/clarity guidelines across the existing casts** (added
|
||||
to STYLE.md "Cast pacing & clarity" 2026-06-11; the projects cast already
|
||||
follows them):
|
||||
1. **Don't submit a command too fast** — a typed-and-`Enter`ed-in-one-instant
|
||||
command vanishes before the viewer reads it. Re-review each cast for
|
||||
type-then-instant-Enter (especially modal confirms / short commands) and
|
||||
add a pause before `Enter` (split `type` and `key:'Enter'` steps).
|
||||
2. **Show state where the sidebar would** — at 90 cols the schema sidebar is
|
||||
hidden (ADR-0046), so insert `show tables` / `show table` / `show data`
|
||||
where state changes, so the viewer can follow what happened.
|
||||
- **Review whether caption banners would improve the existing casts.** The
|
||||
demo overlay can show a neutral step **caption** (the stealth `Ctrl+]`
|
||||
banner) to label or narrate a moment — e.g. marking the phases of the
|
||||
build-the-library/projects casts, or calling out the relationship diagram /
|
||||
the teaching echo in the modes cast. Go cast-by-cast and decide where a
|
||||
caption adds clarity vs. adds noise. Constraint: caption **text must not name
|
||||
keys** (no `j/k`, no `Ctrl+]`); it narrates *what* is happening, not *how* it
|
||||
was typed. (Captions are wired but not yet used in any cast.)
|
||||
- Output-pane scrolling cast remains blocked (PgUp/PgDn unsendable). If desired
|
||||
later, it needs an app-side typeable scroll key (file an enhancement like #24)
|
||||
— otherwise leave it to static docs.
|
||||
|
||||
### 3. Phase B — landing/site polish
|
||||
- Set Starlight **`site`** (production URL) → clears the sitemap warning,
|
||||
enables sitemap + canonical/OG. Then SEO/meta conventions (STYLE #8).
|
||||
- Logo + favicon; branding palette (staying on Starlight).
|
||||
- **Light/dark player theme**: the asciinema player theme is currently fixed
|
||||
(`asciinema`); sync it to the Starlight theme toggle (folded into STYLE #8).
|
||||
- Use the `frontend-design` skill.
|
||||
|
||||
### 4. Open STYLE.md decisions
|
||||
- **#7 Versioning** (leaning single-version for launch).
|
||||
- **#8 SEO/meta** + the player light/dark theme.
|
||||
|
||||
## Capture-harness recipe (how to get accurate static output for new pages)
|
||||
|
||||
Output blocks must be **captured from the real app, never hand-drawn**
|
||||
(STYLE.md). Pattern used throughout:
|
||||
- For `pub` render fns (`render_data_table`, `render_explain_plan`) + the DB
|
||||
worker API: a throwaway **external** test `tests/doc_capture.rs` that builds
|
||||
the library schema via `Database` and prints rendered output; run
|
||||
`cargo test --test doc_capture -- --nocapture --ignored`; paste verbatim
|
||||
(trim trailing spaces); delete the file.
|
||||
- For `pub(crate)` fns (`render_structure_with_diagrams`,
|
||||
`render_relationship_diagram`): an in-crate `#[ignore]` test in
|
||||
`src/output_render.rs`'s test module instead.
|
||||
- **Verify box-drawing integrity** after pasting (top `┬` count == bottom `┴`,
|
||||
equal line lengths) — a mis-paste truncated a CTE border once and the check
|
||||
caught it.
|
||||
|
||||
## Verify-after-changes checklist
|
||||
```sh
|
||||
cd website && pnpm build # clean; 26 pages; only the `site` warning
|
||||
# from repo root — forbidden terms must be empty:
|
||||
grep -rniE '\b(DSL|SQLite|STRICT|rusqlite|PRAGMA)\b' website/src/content/
|
||||
# internal links + heading anchors: spot-check in dist/ (no link validator installed)
|
||||
cd website && pnpm casts # regenerate all casts (needs target/debug binary)
|
||||
```
|
||||
Dev server + tunnel for visual checks (player playback, sizing, badges):
|
||||
`cd website && pnpm dev` (binds 127.0.0.1:4321) then `ssh -L 4321:127.0.0.1:4321 <host>`.
|
||||
**Visual playback of all 7 casts (now with `--demo` badges) is still pending a
|
||||
tunnel check by the user.**
|
||||
|
||||
## Process pins
|
||||
- **Commits:** user-confirmed (show the message first), **no AI attribution**,
|
||||
**append-only** (no amend/rebase/force-push). Push is the user's step.
|
||||
- **Ground every page in source** (`src/dsl/*`, `en-US.yaml`, the ADRs) — not
|
||||
`requirements.md` markers. No engine name, no "DSL" in user-facing copy.
|
||||
- **Issues** via `tea` (repo `oli/rdbms-playground` on `git.lazyeval.net`;
|
||||
append `< /dev/null` + `timeout 30`). Open/related: **#22** (demo overlay,
|
||||
implemented), **#24** (vi picker nav, implemented). Both merged via `927e6b2`.
|
||||
- Escalate genuine forks; declare epistemic status; write down the `/runda` DA
|
||||
pass on non-trivial plans.
|
||||
@@ -0,0 +1,165 @@
|
||||
# Session handoff — 2026-06-15 (70)
|
||||
|
||||
Seventieth handover. Continues from handoff-69 (which closed the last
|
||||
four Gitea issues and left the tracker empty). This session did the
|
||||
**ADR-0052 follow-up** (unwinding vestigial worker `source` plumbing),
|
||||
then **designed and fully implemented H2 — the contextual `hint`
|
||||
command + F1 keybinding (ADR-0053)** end to end (Phases A–D). The CI
|
||||
branch was also merged into `main` mid-session (not my work — see §5).
|
||||
|
||||
Net: **2 feature areas shipped, 1 new ADR (0053) + 1 ADR amendment
|
||||
(0052), 4 new Gitea issues (#35–#38), the `hint` corpus (~57 teaching
|
||||
blocks), and A1 + H2 closed in `requirements.md`.**
|
||||
|
||||
## §1. State at handoff
|
||||
|
||||
**Branch:** `main`. Working tree **clean**; all work committed. Commits
|
||||
are local (push is the user's step).
|
||||
|
||||
**Tests: 2499 passing / 0 failing / 0 skipped / 1 ignored** (the
|
||||
long-standing `friendly` doctest). **Clippy clean** (nursery, all
|
||||
targets). Breakdown: 1799 lib + 500 `it` + 200 typing-surface-matrix.
|
||||
|
||||
**Open Gitea issues (4, all enhancement, all filed this session):**
|
||||
- **#35** — enforce `cargo fmt` across the codebase (single reformat +
|
||||
CI gate). The tree is *not* fmt-clean (~1800 pre-existing diffs); do it
|
||||
once, coordinated with CI, before first publication.
|
||||
- **#36** — `help` collapses advanced-SQL forms onto their simple sibling
|
||||
(a `help`-list dedup artifact); they deserve distinct help content.
|
||||
- **#37** — `hint` clause-concept hints (`on delete` actions, constraint
|
||||
slots, `with pk`, cardinality) — a deferred `hint.concept.<topic>`
|
||||
layer.
|
||||
- **#38** — `hint` pre-submit-diagnostic route + the ~33 `diagnostic.*`
|
||||
tier-3 blocks (deferred; `Diagnostic` carries no class key).
|
||||
|
||||
## §2. ADR-0052 follow-up — vestigial worker `source` unwind (`e8fa859`)
|
||||
|
||||
The first task from handoff-69 §3. ADR-0052 moved success-journaling out
|
||||
of the worker, leaving the `source` that handlers threaded purely for the
|
||||
old `history.log` write dead. **Bigger than the handoff estimated** (it
|
||||
framed it as ~28 call-site edits): the cascade ran through ~30 worker
|
||||
handlers + the `DescribeTable`/`QueryData`/`RunSelect` request fields +
|
||||
their `DatabaseHandle` methods (~164 mostly-test call sites). Fully
|
||||
unwound, compiler-guided, **no behaviour change** (journaling uses a
|
||||
`source_for_journal` clone at the spawn, independent of the worker). The
|
||||
only worker `source` left is the snapshot/undo label. Amended ADR-0052
|
||||
*Consequences* + README. (Two scope forks escalated + user-approved.)
|
||||
|
||||
## §3. H2 — contextual `hint` (ADR-0053), Phases A–D — **shipped**
|
||||
|
||||
The bulk of the session. ADR-0053 settles the `hint` slot ADR-0003 left
|
||||
"ADR pending"; **closes A1** (all 15 app commands now exist) and
|
||||
**requirements H2**. Read ADR-0053 before touching this area — it went
|
||||
through three revisions and several user decisions.
|
||||
|
||||
### The design (all user-chosen)
|
||||
- **Two surfaces:** an **F1 keybinding** → tier-3 hint for the *live*
|
||||
partial input (read-only overlay — never touches buffer/cursor/memo);
|
||||
a submitted **`hint` command** → expands on the *most recent runtime
|
||||
error*. No topic arg (contextual only; `help <topic>` owns reference).
|
||||
- **Tier-3 teaching layer** beneath the existing tier-1 (colour / error
|
||||
headline) and tier-2 (ambient one-liner; the error `hint:` shown **by
|
||||
default** since `Verbosity::Verbose` is the default). Each block is
|
||||
`what` / `example` / `concept`, rendered as a `Hint` heading + aligned
|
||||
labels.
|
||||
- **Per-form keying** (Phase-B revision — the original per-node `hint_id`
|
||||
was too coarse for multi-form commands like `add`/`drop`/`show`): a new
|
||||
**`hint_ids: &[&str]`** field on `CommandNode` mirroring `usage_ids`,
|
||||
resolved by `hint_key_for_input_in_mode` (reuses `usage_key`'s
|
||||
form-word disambiguation + a mode-primary fallback for shared entry
|
||||
words so advanced `insert` → `sql_insert`, simple → `insert`).
|
||||
- **Comprehensive for v1 = command forms + 9 runtime error classes**
|
||||
(the ~33 `diagnostic.*` classes were **deferred**, #38 — see §4).
|
||||
|
||||
### Key files
|
||||
- `src/dsl/command.rs` — `AppCommand::Hint`.
|
||||
- `src/dsl/grammar/app.rs` — `HINT` node + `build_hint`.
|
||||
- `src/dsl/grammar/mod.rs` — the `hint_ids` field, `hint_key_for_input_in_mode`,
|
||||
the factored `pick_form_key`, and the two **comprehensiveness coverage
|
||||
tests** (every node has a resolving `hint.cmd.*`; every runtime error
|
||||
class has a `hint.err.*`).
|
||||
- `src/app.rs` — F1 arm in `handle_key` (read-only overlay, placed before
|
||||
the completion-memo clear); `note_hint_for_input` / `note_hint_for_recent_error`
|
||||
/ `note_getting_started` / `emit_tier3_block`; `last_error_hint_key`
|
||||
state (set in `handle_dsl_failure`, cleared in `submit` for DSL
|
||||
commands).
|
||||
- `src/friendly/translate.rs` — `error_hint_class` (maps a `DbError` +
|
||||
ctx to its `hint.err.<class>`; mirrors `translate`'s dispatch — keep in
|
||||
sync, unit-tested).
|
||||
- `src/friendly/strings/en-US.yaml` + `keys.rs` — the corpus under
|
||||
`hint.cmd.<form>` / `hint.err.<class>` + `hint.block.*` labels +
|
||||
`shortcut.hint`.
|
||||
- `src/ui.rs` — ADR-0051 strip advertises **F1** (editing + default
|
||||
states); 12 full-panel snapshots re-accepted.
|
||||
|
||||
### Phases (one commit each unless noted)
|
||||
- **A** (`050b363`) skeleton + tier-2 fallback; **B** (`4a5fd1b`) per-form
|
||||
keying + 3 exemplars; **C** content in 5 batches (`4bdfce6` app,
|
||||
`6429b56` DDL, `9c4d520` DML, `97970f2` advanced-SQL, `b6b98ad` runtime
|
||||
errors) + `417cbc8` diagnostic deferral; **D** (`447112b`) coverage gate
|
||||
+ F1 strip + status flips; **/runda fix** (`329adfc`) — see §3.1.
|
||||
|
||||
### 3.1 — what the final `/runda` caught (don't skip)
|
||||
Per-batch substring tests masked a **presentation gap**: `emit_tier3_block`
|
||||
was emitting three *bare, unlabelled* lines, deviating from the approved
|
||||
exemplar format. Fixed to render a `Hint` heading + aligned `What:` /
|
||||
`Example:` / `Concept:` lines, **locked by an `insta` snapshot**
|
||||
(`hint_block_insert`). Also confirmed the `Next:` line (ADR D2 exemplar)
|
||||
is correctly **omitted** — tier-2 ambient already owns live
|
||||
position-awareness. Lesson for the next content/UI work: **add a rendered
|
||||
snapshot early**; substring asserts don't see layout.
|
||||
|
||||
## §4. Deferrals (all tracked, all user-confirmed)
|
||||
|
||||
- **#38 diagnostic route + `diagnostic.*` blocks** — `Diagnostic`
|
||||
(`walker/outcome.rs`) carries only its rendered `message`, not a class
|
||||
key, so the F1 diagnostic route would need a `class` field threaded
|
||||
through every diagnostic site (broad) for marginal value (tier-2
|
||||
already surfaces diagnostics; many duplicate runtime classes). F1 still
|
||||
shows the useful command block when a diagnostic is present.
|
||||
- **#37 clause-concept hints** — per-form is the right tier-3 granularity;
|
||||
clause-level concepts are a separate `hint.concept.<topic>` layer for
|
||||
later.
|
||||
- **#36 `help` advanced-SQL** — out of H2's scope (touches shipped `help`).
|
||||
|
||||
## §5. CI branch merged into `main` (not my work)
|
||||
|
||||
Mid-session the **`ci` branch was merged** (commits `47a0816`, `138e766`
|
||||
+ the `ci:`/`build:`/`docs(ci):` commits). `main` now carries a CI
|
||||
pipeline, a nix flake, and **D1 cross-platform release builds** (matrix +
|
||||
macOS), documented under a **new `docs/ci/adr/` namespace** (ci-001..003).
|
||||
Implications for the roadmap: **D1 (cross-platform binaries) is now
|
||||
substantially underway** — re-assess D1/D2/D3 status against what landed
|
||||
before treating them as open. My H2 work is layered cleanly on top (all
|
||||
green post-merge).
|
||||
|
||||
## §6. Next session — start here
|
||||
|
||||
1. **Push** (user step) — 30-odd local commits incl. the CI merge + all
|
||||
of H2.
|
||||
2. **Re-baseline the roadmap** against the merged CI work: D1/D2/D3 and
|
||||
**TT5 CI** are partly/largely done now — read `docs/ci/adr/` and the
|
||||
workflows before assuming they're open (handoff-69 §5 predates this).
|
||||
3. **#35 (cargo fmt gate)** is the natural pairing with the now-merged CI
|
||||
— the user wanted it done once, before first publication.
|
||||
4. Other `requirements.md` open items (verify against CI merge first):
|
||||
**TT4** PTY tier-4 (still unwired), **I1** multi-line input, **I5/B3**
|
||||
in-flight cancellation, **V4** session journal (own ADR), **TU1**
|
||||
tutorial system (own ADR). H2/A1 are now **done**.
|
||||
5. The H2 deferrals (#36/#37/#38) are available if the user wants to
|
||||
round out the hint/help surface.
|
||||
|
||||
## §7. How to take over
|
||||
|
||||
1. Read handoffs 68 → 69 → 70, `CLAUDE.md`, `docs/requirements.md`.
|
||||
2. Confirm green: `cargo test` (expect **2499 pass / 1 ignored**) +
|
||||
`cargo clippy --all-targets` (clean).
|
||||
3. Read `docs/ci/adr/` (the merged CI work) before touching CI/release/D*.
|
||||
4. For anything in the `hint` area, read **ADR-0053** first (3 revisions
|
||||
+ deferrals #37/#38). For journaling, ADR-0052 (+ its 2026-06-14
|
||||
follow-up note).
|
||||
5. Project workflow unchanged: phased, test-first, `/runda` + DA before
|
||||
commits, ADR amendment + README index-upkeep for decided-area changes,
|
||||
confirm commit messages with the user.
|
||||
6. Consider a `cargo sweep` at this milestone (`target/` grows; see
|
||||
CLAUDE.md "Build hygiene").
|
||||
@@ -0,0 +1,120 @@
|
||||
# Session handoff — 2026-06-15 (71)
|
||||
|
||||
Short, focused handover. Continues immediately from handoff-70 (which
|
||||
shipped H2 / the contextual `hint`, ADR-0053). **A user smoke-test
|
||||
surfaced a correctness bug in the hint content, and it implicates the
|
||||
whole corpus.** This handoff exists so the next session does a
|
||||
**systematic semantic verification pass over every hint block** — context
|
||||
ran too low to do it now.
|
||||
|
||||
## §1. State
|
||||
|
||||
**Branch:** `main`, clean, all committed (local; push pending). **2499
|
||||
pass / 1 ignored, clippy clean.** Open issues: #35–#38 (see handoff-70).
|
||||
H2 / ADR-0053 is *functionally* complete; the **content is not
|
||||
trustworthy** until the pass below is done.
|
||||
|
||||
## §2. The bug (confirmed)
|
||||
|
||||
`hint.cmd.create_table` (in `src/friendly/strings/en-US.yaml`) reads:
|
||||
|
||||
```
|
||||
What: Create a new table — its columns, their types, and a primary key.
|
||||
Example: create table Customers with pk id(serial), name(text), email(text)
|
||||
Concept: A table is a set of rows that share the same columns. The primary
|
||||
key uniquely identifies each row; a `serial` key numbers the rows for you.
|
||||
```
|
||||
|
||||
**This is wrong.** In the DSL, **everything after `with pk` is the
|
||||
primary-key column list** (a possibly *compound* PK, ADR-0005). So the
|
||||
example does **not** create a table with `pk=id` plus regular columns
|
||||
`name`/`email` — it creates a table whose **compound primary key is
|
||||
(id, name, email)**. Non-key columns are added *separately* with
|
||||
`add column`. The `what` ("its columns, their types") and the example
|
||||
both mislead a learner badly.
|
||||
|
||||
- **Evidence:** real test usage is `create table Orders with pk
|
||||
id(serial), CustId(int)` (a 2-column *compound PK*) and the common form
|
||||
`create table X with pk id(int)` (single-column PK only). The usage
|
||||
template `create table <Name> with pk [<col>(<type>)[, ...]]` is itself
|
||||
misleading — the `[, ...]` is the PK list, not regular columns.
|
||||
- **Correct mental model:** `create table <T> with pk <pk-cols…>` then
|
||||
`add column <T>: <name> (<type>)` for each non-key column. Confirm
|
||||
against ADR-0005 (compound PK) and ADR-0009 (DSL syntax) when fixing.
|
||||
|
||||
## §3. Root cause — why this needs a *full* pass
|
||||
|
||||
During Phase C I verified *some* examples against `parse.usage.*`
|
||||
templates and real test greps, but for others I **extrapolated** beyond
|
||||
verified syntax. For `create_table` I saw `... with pk id(int)` (single
|
||||
col) and wrongly generalised to "pk + more columns," misreading the
|
||||
`with pk` list as a column list. The examples are **syntactically**
|
||||
checked but not **semantically** — i.e. not verified to *do what the
|
||||
`what`/`concept` claims*.
|
||||
|
||||
So the corpus needs a pass that, for **every** `hint.cmd.*` and
|
||||
`hint.err.*` block, checks:
|
||||
1. the `example` parses **and runs**, and
|
||||
2. it actually demonstrates what `what`/`concept` says, and
|
||||
3. `what`/`concept` are factually true of the real behaviour.
|
||||
|
||||
**Don't trust grep+extrapolation.** Prefer: run the example in the app
|
||||
(or a Tier-3 test), or check it against the authoritative ADR.
|
||||
|
||||
## §4. The pass — how to do it (next session)
|
||||
|
||||
The corpus lives in `src/friendly/strings/en-US.yaml` under `hint.cmd.*`
|
||||
(per command form) and `hint.err.*` (per runtime error class). The
|
||||
inventory and authoritative syntax sources:
|
||||
|
||||
- **`hint.cmd.<form>`** — for each, cross-check the example against the
|
||||
matching `parse.usage.<form>` template **and** the form's ADR, and run
|
||||
it. Highest-risk (extrapolated, verify first): **DDL** — `create_table`
|
||||
(known wrong), `add_column`, `add_index`, `add_constraint`,
|
||||
`change_column`, `drop_*`, `create_m2n`; **advanced-SQL** — confirm
|
||||
each is in the supported SQL subset (`select`, `with` CTE,
|
||||
`sql_insert/update/delete`, `sql_create_table`, `sql_alter_table`,
|
||||
`sql_create_index/drop_index/drop_table`, `explain_sql`); **DML** —
|
||||
`seed` forms, `explain`, `show_*`, `update`/`delete` (`--all-rows` /
|
||||
required-WHERE wording). App commands are lower-risk (reference-style).
|
||||
- **`hint.err.<class>`** — verify the fix recipe in `example` is actually
|
||||
the right remedy and `concept` matches the engine's real behaviour
|
||||
(FK sides, `on delete` actions, check/not_null/unique semantics).
|
||||
- Relevant ADRs: 0005 (types + compound PK), 0009 (DSL syntax), 0011 (FK
|
||||
type compat), 0013 (relationships/rebuild), 0014 (data ops +
|
||||
required-WHERE), 0025 (indexes), 0028/0039 (explain), 0030–0036 (SQL
|
||||
subset), 0048 (seed). `docs/requirements.md` for scope.
|
||||
|
||||
**Suggested method:** drive the app (`/run` or a small PTY/Tier-3 harness)
|
||||
and actually execute each example; or add a test that parses+runs every
|
||||
`hint.cmd.*` example and asserts success. The latter would also be a
|
||||
durable regression guard — consider adding it as part of the pass (it
|
||||
upgrades the comprehensiveness coverage test from "a block exists" to
|
||||
"the example actually works").
|
||||
|
||||
## §5. Immediate fix ready to apply
|
||||
|
||||
`create_table` is diagnosed (§2). The corrected block should make the
|
||||
example a PK-only `create table` and move the regular columns to a
|
||||
follow-up `add column`, e.g.:
|
||||
|
||||
```
|
||||
What: Create a new table with its primary key.
|
||||
Example: create table Customers with pk id(serial)
|
||||
Concept: A table is a set of rows sharing the same columns. `with pk`
|
||||
declares the primary key (one column, or several for a compound
|
||||
key); add the other columns afterwards with `add column`.
|
||||
```
|
||||
|
||||
Apply this (and re-check `create_m2n` / `add_*` while there), but only as
|
||||
part of the systematic pass — a one-off fix risks leaving siblings wrong.
|
||||
|
||||
## §6. How to take over
|
||||
|
||||
1. Read handoffs 70 → 71, `CLAUDE.md`.
|
||||
2. Confirm green: `cargo test` (2499 / 1 ignored), `cargo clippy
|
||||
--all-targets`.
|
||||
3. Do the §4 pass (consider the run-every-example test in §4). Test-first,
|
||||
`/runda` before commit, confirm the commit message with the user.
|
||||
4. Pedagogy wins — these are teaching strings; correctness and clarity
|
||||
over cleverness.
|
||||
@@ -0,0 +1,113 @@
|
||||
# Session handoff — 2026-06-15 (72)
|
||||
|
||||
Short, focused handover. Continues from handoff-71, which asked the next
|
||||
session to run a **systematic semantic verification pass over every
|
||||
`hint` block** (handoff-70 shipped H2 / ADR-0053, but a user smoke-test
|
||||
found a wrong hint and implicated the whole corpus). **That pass is now
|
||||
done.** Four content errors fixed, a durable parse-guard added, two stale
|
||||
docs corrected. Commit `5a37437`.
|
||||
|
||||
## §1. State
|
||||
|
||||
**Branch:** `main`, clean, all committed (local; **push pending** — your
|
||||
step). **2500 pass / 0 fail / 1 ignored** (the long-standing `friendly`
|
||||
doctest), **clippy clean** (nursery, all targets). The +1 vs handoff-71's
|
||||
2499 is the new guard test. Open Gitea issues unchanged: **#35–#38**.
|
||||
|
||||
## §2. The verification pass (commit `5a37437`)
|
||||
|
||||
Method: cross-checked every `hint.cmd.*` example against its
|
||||
`parse.usage.*` template, ground-truthed every concept claim against the
|
||||
authoritative ADR **and a named existing test** (not grep+extrapolation —
|
||||
the trap handoff-71 §3 warned about), and parse-validated all 49 command
|
||||
examples via a new guard.
|
||||
|
||||
### Four content errors fixed (`src/friendly/strings/en-US.yaml`)
|
||||
|
||||
| Block | Bug | Fix |
|
||||
|---|---|---|
|
||||
| `cmd.create_table` | Example `with pk id(serial), name(text), email(text)` declares a **3-column compound PK**, not a PK + regular columns. Every `with pk` column is a key member — confirmed by the grammar test comment *"Every `create table` column is a primary-key column"* (`ddl.rs`), ADR-0005. | Single-column PK + `add column` for the rest; `what`/`concept` aligned. |
|
||||
| `cmd.save` | `save as my-shop` **does not parse** — `build_save` yields `AppCommand::SaveAs` with **no inline name**; `save as` opens a path-entry modal (`iteration4b` tests). | Example → `save as`; `what` de-implied; added an accurate temp-vs-named-auto-save `concept`. |
|
||||
| `cmd.import` | Target `shop-copy` **does not parse** — the `as <target>` slot is an `IdentSource::NewName` ident that tokenises only up to the hyphen. (The zip path is a BarePath and *does* accept hyphens, hence `export my-shop.zip` is fine.) | → `shop_copy`. |
|
||||
| `err.foreign_key.child_side.concept` | Offered `on delete set null/cascade` as the remedy — but `error_hint_class` maps child_side to **insert/update** violations; `on delete` governs the **parent** direction. The tier-1 hint (line 64) correctly omits it. | Corrected: parent must exist first; clarified `on delete` is the *other* direction. |
|
||||
|
||||
### Durable guard added
|
||||
|
||||
`every_cmd_hint_example_parses_in_its_mode` (`src/dsl/grammar/mod.rs`,
|
||||
in the `hint_key_tests` module). **Catalog-driven** — it iterates
|
||||
`catalog().keys()` for `hint.cmd.*.example` rather than the REGISTRY, so
|
||||
an orphaned/mis-keyed block can't slip past; floor-asserts ≥49 examples.
|
||||
Each parses in its taught mode (advanced for the SQL surface, simple
|
||||
otherwise). It caught the `save` and `import` errors **test-first** (red
|
||||
before the YAML fix). Registered the new `hint.cmd.save.concept` key in
|
||||
`keys.rs` (the `keys_validate_against_catalog` test requires every catalog
|
||||
key be declared).
|
||||
|
||||
### Verified correct (not changed)
|
||||
|
||||
All other `cmd`/`err` blocks. Notably the guard-*concept* claims were each
|
||||
confirmed against a named runtime test, not assumed:
|
||||
`drop_column_refuses_primary_key` / `…_column_in_a_relationship`,
|
||||
`drop_table_with_inbound_relationship_errors`,
|
||||
`add_not_null_column_without_default_to_populated_table_is_refused`. The
|
||||
corrected `create_table` story stays coherent with the `Customers`-
|
||||
referencing examples (id serial PK → `add column` name/email → `insert`
|
||||
skips the auto id).
|
||||
|
||||
## §3. Docs corrected (same commit)
|
||||
|
||||
Discovered while verifying `create_m2n` (which **is** implemented —
|
||||
`db.rs::do_create_m2n_relationship` + `tests/it/m2n.rs`):
|
||||
|
||||
- **CLAUDE.md** carried two **stale "deferred" claims**, both already
|
||||
implemented. Removed/updated: (a) the at-a-glance project-format line
|
||||
said export/import (Iter 5) + `--resume`/input-history/migration (Iter
|
||||
6) were "pending" — all `[x]` in `requirements.md` (ADR-0015); (b) the
|
||||
"Things deliberately deferred" list still had the **m:n convenience
|
||||
(C4)** bullet and the same project-storage bullet. `requirements.md`
|
||||
was already correct (C4 done 2026-06-10, ADR-0045), so only a
|
||||
verification-pass note was appended to its **H2** entry.
|
||||
|
||||
## §4. Scope note — what the guard does *not* do
|
||||
|
||||
The bug class here is **semantic** (an example that parses and runs but
|
||||
misrepresents the prose — e.g. `create_table`). The guard enforces only
|
||||
the **syntactic floor**: examples parse in their mode. It backstops
|
||||
future typos/clause-drift but cannot police meaning. Semantic correctness
|
||||
of the current corpus rests on this session's review (recorded in the
|
||||
commit + requirements.md H2). A stronger-but-brittler option was offered
|
||||
to the user and **not built pending their call**: per-form assertions
|
||||
that each example resolves to the *expected command shape* (e.g.
|
||||
create_table → single-column PK). `hint.err.*` examples are fix-recipe
|
||||
prose, not runnable, so they're verified by review only — inherent.
|
||||
|
||||
## §5. Next session — start here
|
||||
|
||||
The hint corpus is now trustworthy. Open roadmap (verify against the CI
|
||||
merge first, per handoff-70 §5):
|
||||
|
||||
1. **Push** (your step) — this commit + the still-unpushed backlog from
|
||||
handoffs 70/71 (the CI merge + all of H2).
|
||||
2. **#35 (cargo fmt gate)** — the natural pairing with the merged CI; the
|
||||
user wanted it done once, before first publication. The tree is **not**
|
||||
fmt-clean (~1800 pre-existing diffs).
|
||||
3. Other `requirements.md` open items: **TT4** PTY tier-4 (unwired),
|
||||
**I1** multi-line input, **I5/B3** in-flight cancellation, **V4**
|
||||
session journal (own ADR), **TU1** tutorial system (own ADR).
|
||||
4. Hint follow-ups if wanted: **#37** clause-concept hints, **#38**
|
||||
diagnostic route + `diagnostic.*` blocks, **#36** `help` advanced-SQL.
|
||||
|
||||
## §6. How to take over
|
||||
|
||||
1. Read handoffs 70 → 71 → 72, `CLAUDE.md`, `docs/requirements.md`.
|
||||
2. Confirm green: `cargo test` (**2500 / 1 ignored**) + `cargo clippy
|
||||
--all-targets` (clean).
|
||||
3. For anything in the `hint` area, read **ADR-0053** first. For the
|
||||
corpus, `src/friendly/strings/en-US.yaml` (`hint.cmd.*` / `hint.err.*`)
|
||||
is the content; the guard in `src/dsl/grammar/mod.rs` is the regression
|
||||
net.
|
||||
4. Workflow unchanged: phased, test-first, `/runda` + DA before commits,
|
||||
ADR amendment + README index-upkeep for decided-area changes, confirm
|
||||
commit messages with the user.
|
||||
5. Consider a `cargo sweep` at this milestone (`target/` grows; see
|
||||
CLAUDE.md "Build hygiene").
|
||||
@@ -0,0 +1,243 @@
|
||||
# Plan — ADR-0053: contextual `hint` command + F1 keybinding (H2)
|
||||
|
||||
Implements ADR-0053. Closes the last open piece of **A1** (the canonical
|
||||
app-command set) and requirements **H2**. No Gitea issue — this is
|
||||
requirements-driven work; any genuine "later" item found en route gets
|
||||
its own issue (cf. #36, already filed for the parallel `help`-side gap).
|
||||
|
||||
## 1. Goal
|
||||
|
||||
Give learners on-demand, **teaching-grade** contextual help — a *third*
|
||||
tier beneath the existing terse always-on text (tier 1) and the
|
||||
short contextual lines that are already shown (tier 2: the live ambient
|
||||
prose, and the error `hint:` which is on by default since
|
||||
`Verbosity::Verbose` is the default). Two surfaces:
|
||||
|
||||
- **F1** (read-only overlay) → a tier-3 block for the **live partial
|
||||
input**, or — on empty input — for the **most recent runtime error**.
|
||||
- **`hint`** (submitted app command) → the tier-3 block for the **most
|
||||
recent runtime error** (the buffer is empty post-submit, so it can only
|
||||
act on recent context).
|
||||
|
||||
The mechanism is small; the **content corpus is the feature** (~80
|
||||
blocks, comprehensive for v1, authored exemplars-first per ADR-0053 D7).
|
||||
|
||||
## 2. The shape of the work (why this order)
|
||||
|
||||
The mechanism and the content are separable, and the mechanism should
|
||||
land first with **graceful tier-2 fallback** so every surface works
|
||||
before any tier-3 text exists. That lets us:
|
||||
|
||||
- build + test the trigger matrix / routing / `:`-strip / read-only-
|
||||
overlay behaviour against a skeleton (TDD), then
|
||||
- pour in content in reviewable batches without re-touching the wiring,
|
||||
- and turn on the **comprehensiveness coverage test** only once the
|
||||
corpus is complete (it is red until then — by design).
|
||||
|
||||
Build order: **Phase A** (mechanism skeleton, falls back to tier-2) →
|
||||
**Phase B** (catalogue structure + the three approved exemplars) →
|
||||
**Phase C** (comprehensive content, batched) → **Phase D** (polish:
|
||||
strip advertisement, snapshots, full green).
|
||||
|
||||
## 3. Grammar: the `hint_ids` field + the `HINT` node
|
||||
|
||||
### 3a. New `CommandNode.hint_ids` (per-form — revised in Phase B)
|
||||
- Add `pub hint_ids: &'static [&'static str]` to `CommandNode`
|
||||
(`src/dsl/grammar/mod.rs:512`, beside `help_id` / `usage_ids`),
|
||||
**mirroring `usage_ids`** — *not* a per-node `Option<&str>`. The Phase-B
|
||||
exemplar (`add 1:n relationship`) showed per-*node* keying is too coarse:
|
||||
`add`/`drop`/`show`/`create` are each one node spanning many forms, and
|
||||
a live-input hint must be specific to the typed form. Compiler forces
|
||||
every node literal (~37, across `grammar/app.rs`, `data.rs`, `ddl.rs`) to
|
||||
set it — Phase A/B leave most `&[]` (tier-2 fallback); Phase C fills them.
|
||||
**Multi-form nodes list ALL their form keys** (e.g. `add` →
|
||||
`["add_column", "add_relationship", "add_index", "add_constraint"]`) so
|
||||
the form-word disambiguation resolves correctly and unauthored forms fall
|
||||
back at render rather than mis-resolving to a sibling.
|
||||
- **Lookup:** `hint_key_for_input_in_mode(source, mode)` returns the single
|
||||
typed form's hint stem, reusing `pick_form_key` (factored out of
|
||||
`usage_key_for_input_in_mode` — shared digit/`m:n`/suffix disambiguation).
|
||||
- **Why a new field, not `help_id`** (ADR-0053 D3): `help_id` is `None` on
|
||||
the 7 advanced-SQL forms purely to dedup the `help` *list*; those forms
|
||||
have distinct SQL syntax and need their own block. `hint_ids` is per
|
||||
form. (The parallel `help`-side gap is issue #36; clause-concept hints
|
||||
are deferred — issue #37.)
|
||||
|
||||
### 3b. `AppCommand::Hint` + the `HINT` node
|
||||
- `AppCommand::Hint` variant (no fields — no topic arg) in
|
||||
`src/dsl/command.rs:544`.
|
||||
- `pub static HINT: CommandNode` in `grammar/app.rs` mirroring `HELP` but
|
||||
with **no topic shape** (bare keyword, like `UNDO`): `entry:
|
||||
Word::keyword("hint")`, `shape: EMPTY_SEQ` (as `UNDO`,
|
||||
`grammar/app.rs:333`), `ast_builder:
|
||||
build_hint` (returns `Command::App(AppCommand::Hint)`), `help_id:
|
||||
Some("app.hint")`, `hint_id: Some("app.hint")`, `usage_ids:
|
||||
&["parse.usage.hint"]`.
|
||||
- Register `(&app::HINT, CommandCategory::Simple)` in `REGISTRY`
|
||||
(`grammar/mod.rs`), beside `HELP`. (App commands are available in both
|
||||
modes via the existing mechanism.)
|
||||
|
||||
## 4. Command identification (live-input → node)
|
||||
|
||||
The F1 live-input path needs "which command form is being typed." **The
|
||||
lookup machinery already exists** — do not rebuild entry matching:
|
||||
- `command_for_entry_word(word) -> Option<(usize, &'static CommandNode)>`
|
||||
(`grammar/mod.rs:811`) returns the matched node for an entry word
|
||||
(Simple-first; the caller extracts the first word of the input).
|
||||
- `usage_keys_for_input_in_mode(source, mode)` (`grammar/mod.rs:564`)
|
||||
already performs the **mode-aware** Simple/Advanced selection the hint
|
||||
path needs (advanced `create` → the SQL nodes, simple → the DSL node) —
|
||||
it just returns `usage_ids` rather than the node.
|
||||
- **The only new bit:** a thin `hint_id_for_input_in_mode(source, mode)`
|
||||
(or a node-returning sibling of `usage_keys_for_input_in_mode`) that
|
||||
applies the same mode selection and returns the chosen node's
|
||||
`hint_id`. Mirror the existing function; don't duplicate its matching.
|
||||
- **`:`-strip:** in Simple mode, strip a leading `:` (one-shot escape,
|
||||
ADR-0003) before identification so `: SELECT …` resolves to the
|
||||
advanced `SELECT` node.
|
||||
- No match (empty / unrecognised entry word) → the "getting started"
|
||||
pointer (D2).
|
||||
|
||||
## 5. F1 keybinding (read-only overlay)
|
||||
|
||||
In `App::handle_key` (`src/app.rs:1155`):
|
||||
- Add an F1 arm (`KeyCode::F(1)`) **after** the modal gate and the
|
||||
sidebar-nav gate (inert there, per D2), and **before** the
|
||||
"any other key clears the completion memo" fall-through (`_ =>
|
||||
self.last_completion = None`, ~line 1228) — F1 must **not** clear the
|
||||
memo or touch the buffer/cursor (D1).
|
||||
- Behaviour (the trigger matrix, D2):
|
||||
- non-empty input → `note_hint_for_input()` (the command's `hint.cmd`
|
||||
block + the live "Next:" expected-set from the walker).
|
||||
- empty input + `last_error_hint_key` set → `note_hint_for_error()`.
|
||||
- empty input + no recent error → `note_getting_started()`.
|
||||
- Returns `Vec::new()` (pure output emission, like `help`).
|
||||
- `demo_badge_label` (`app.rs:520`) gains an `F1 → "[F1]"` entry so demo
|
||||
mode surfaces it (ADR-0047).
|
||||
|
||||
## 6. The two error routes (D2 / D5)
|
||||
|
||||
- **Runtime errors:** add `last_error_hint_key: Option<String>` to `App`.
|
||||
Set it where friendly errors are rendered (`runtime.rs:2615`,
|
||||
`app.rs:2424`) from the error's class key; clear on the next successful
|
||||
command. The `hint` command and empty-input F1 read it.
|
||||
- **Pre-submit diagnostics:** the F1 live-input path, when the input
|
||||
carries an under-cursor diagnostic, reads it straight from the walker
|
||||
(`input_diagnostics_in_mode`, the same source the ambient panel uses)
|
||||
and renders that diagnostic's `hint.err.<class>` block instead of (or
|
||||
alongside) the command block. No stored state.
|
||||
- Both render from `hint.err.*`.
|
||||
|
||||
## 7. Rendering: the `note_hint*` family (D4)
|
||||
|
||||
- New `App::note_hint_for_input`, `note_hint_for_error`,
|
||||
`note_getting_started` (siblings of `note_help`/`note_help_topic`,
|
||||
`app.rs:2982`/`3021`).
|
||||
- A tier-3 block is **structured** (`what` / `example` / `concept`, plus
|
||||
the live `Next:` line on the input path). The catalogue stores each part
|
||||
under sub-keys (`hint.cmd.<id>.what`, `.example`, `.concept`); the
|
||||
renderer fetches each via `t!` and lays them out as a small framed
|
||||
block.
|
||||
- Styling: `OutputKind::System`; `OutputStyleClass::Hint` (muted) on
|
||||
`what`/`concept`/`Next`, `Neutral` on `example` so the runnable line
|
||||
stands out. Reuse `OutputLine::styled` + `push_category_three_prose`
|
||||
patterns (`app.rs:3121`).
|
||||
- **Fallback:** if a node's `hint_id` is `None` or a key is missing,
|
||||
degrade to tier-2 (ambient prose for the input path; the verbose error
|
||||
`hint:` for the error path) — never blank.
|
||||
|
||||
## 8. Catalogue + `keys.rs`
|
||||
|
||||
- New sub-namespaces under the existing top-level `hint:` in
|
||||
`src/friendly/strings/en-US.yaml`: `hint.cmd.<hint_id>.{what,example,
|
||||
concept}` and `hint.err.<class>.{what,example,concept}`.
|
||||
- Register every key + its placeholders in `src/friendly/keys.rs`
|
||||
(`KEYS_AND_PLACEHOLDERS`) so the build-time validation covers them.
|
||||
- `parse.usage.hint` + `help.app.hint` strings for the command itself.
|
||||
|
||||
## 9. Content (Phase C — the bulk, batched per D7)
|
||||
|
||||
Exemplars approved in the ADR (`insert` live-input, FK child-side error,
|
||||
`add relationship`) are the template. Author in reviewable batches:
|
||||
1. **App commands** (~16): save/save as/load/new/rebuild/export/import/
|
||||
replay/undo/redo/mode/messages/copy/help/hint/quit.
|
||||
2. **DDL** (simple): create table, create m:n, add column/relationship/
|
||||
index, drop, rename, change column.
|
||||
3. **DML** (simple): insert, update, delete, show, seed, explain,
|
||||
select/with.
|
||||
4. **Advanced-mode SQL forms** (7): SQL CREATE TABLE, ALTER TABLE,
|
||||
CREATE/DROP INDEX, DROP TABLE, SQL INSERT/UPDATE/DELETE, EXPLAIN SQL —
|
||||
**own blocks, SQL-syntax examples**.
|
||||
5. **Runtime error classes** (9): unique, foreign_key ×{child,parent},
|
||||
not_null, check, type_mismatch, not_found, already_exists, generic,
|
||||
invalid_value.
|
||||
6. **`diagnostic.*` classes** (~33): arity/type/unknown-table-column/etc.
|
||||
|
||||
Each block: `what` (1–2 sentences), `example` (one runnable line,
|
||||
mode-correct), `concept` (the relational idea — the teaching part;
|
||||
optional only where genuinely none, e.g. `quit`).
|
||||
|
||||
## 10. Tests
|
||||
|
||||
Written test-first against the Phase-A skeleton where possible.
|
||||
|
||||
- **Tier 1 (unit, `app.rs`):**
|
||||
- trigger matrix: F1 non-empty → command block; F1 empty + recent error
|
||||
→ error block; F1 empty + none → getting-started; `hint` command +
|
||||
error → error block; `hint` + none → getting-started.
|
||||
- `last_error_hint_key` set on a failing command, cleared on the next
|
||||
success.
|
||||
- routing: a pre-submit diagnostic on the input drives the diagnostic
|
||||
`hint.err`; a runtime error drives the stored-key route.
|
||||
- `:`-strip: `: SELECT …` in Simple mode resolves to the advanced node.
|
||||
- **read-only overlay:** F1 leaves `input`, `input_cursor`, and
|
||||
`last_completion` unchanged.
|
||||
- tier-2 fallback when `hint_id`/key absent.
|
||||
- **Tier 2 (`insta`):** snapshot a representative rendered tier-3 block
|
||||
(the `insert` exemplar) so the framed layout + styling spans are locked.
|
||||
- **Tier 3 (integration, `tests/it/`):** type a partial command → F1 →
|
||||
block appears, buffer untouched; run a failing insert → `hint` → FK
|
||||
error expansion.
|
||||
- **Comprehensiveness coverage test** (enforces D6, the key one): iterate
|
||||
`REGISTRY` and assert every node has a `hint_id` resolving to a
|
||||
`hint.cmd.*` block; assert every runtime-error + `diagnostic.*` class
|
||||
has a `hint.err.*` block. **Red until Phase C completes** — enable
|
||||
(un-`ignore`) as the final gate.
|
||||
- `keys.rs` validation continues to guarantee every *referenced* key
|
||||
resolves.
|
||||
|
||||
## 11. Keybinding strip + discoverability (Phase D)
|
||||
|
||||
- The ADR-0051 bottom strip advertises **F1 = hint** in the editing/
|
||||
typing state (and on the empty-input state, since F1 still does
|
||||
something there). Re-accept the affected full-panel snapshots.
|
||||
|
||||
## 12. ADR / docs
|
||||
|
||||
- ADR-0053 is committed (`e16ad50`). On completion, flip its Status from
|
||||
"implementation pending" to implemented (with date), and update the
|
||||
README index entry + `requirements.md` **H2 → [x]** and **A1 → [x]**
|
||||
(A1 closes when `hint` lands).
|
||||
|
||||
## 13. Risks / watch-list
|
||||
|
||||
- **Command-identification reuse.** The lookup exists
|
||||
(`command_for_entry_word` + the mode-aware `usage_keys_for_input_in_mode`,
|
||||
`grammar/mod.rs:811`/`564`); the only new code is a thin node/`hint_id`
|
||||
variant that reuses their selection. Do **not** re-implement entry-word
|
||||
matching — mirror the existing functions.
|
||||
- **Structured-key ergonomics.** Three sub-keys per block × ~80 blocks is
|
||||
~240 catalogue keys; keep the `keys.rs` registration generation tidy
|
||||
(consider a helper that registers the `{what,example,concept}` triple
|
||||
for an id).
|
||||
- **Content voice drift across batches.** Re-check each batch against the
|
||||
approved exemplars; the `concept` line is where drift (too terse / too
|
||||
advanced) creeps in. Pedagogy wins ties.
|
||||
- **F1 terminal capture.** A few terminals intercept F1; acceptable
|
||||
(it's the convention) but note it if testing surfaces it.
|
||||
- **Snapshot churn.** The strip change re-accepts ADR-0051 snapshots;
|
||||
keep that diff isolated.
|
||||
- **Coverage-test timing.** It is red through Phases A–C; gate it so CI
|
||||
isn't broken mid-stream (e.g. `#[ignore]` until the final batch), then
|
||||
make passing it the completion criterion.
|
||||
```
|
||||
+52
-11
@@ -61,11 +61,32 @@ since ADR-0027.)
|
||||
|
||||
## Distribution and install
|
||||
|
||||
- [ ] **D1** Cross-platform binaries: Linux, macOS, Windows on
|
||||
- [x] **D1** Cross-platform binaries: Linux, macOS, Windows on
|
||||
x86_64 and aarch64.
|
||||
- [ ] **D2** Single static binary, no runtime dependencies.
|
||||
*(Done 2026-06-15 — CI produces all six. The four non-macOS
|
||||
targets (Linux musl + Windows gnu/gnullvm × x86_64/aarch64) are
|
||||
cross-built from the Linux runner with `cargo-zigbuild` on a `v*`
|
||||
tag (`release.yaml`); the two `*-apple-darwin` targets build
|
||||
natively on a Tart Apple-Silicon runner via the dispatched
|
||||
`release-macos.yaml`. All uploaded to the Gitea release with a
|
||||
`.sha256` each. Decisions in `docs/ci/adr/` (ADR-ci-001/002/003).
|
||||
Runtime-verified by the user: Linux x86_64 + Windows aarch64; the
|
||||
others are link-clean / valid format.)*
|
||||
- [x] **D2** Single static binary, no runtime dependencies.
|
||||
*(Done 2026-06-15, per platform: **Linux** is fully static (musl +
|
||||
`crt-static`); **Windows** is a standalone `.exe` (Zig statically
|
||||
links libc — no mingw runtime DLLs); **macOS** links only system
|
||||
libraries (`libSystem` + the AppKit/Foundation frameworks —
|
||||
inherent on every Mac, never user-installed; the build rewrites the
|
||||
one nix-store `libiconv` path to `/usr/lib` and re-signs ad-hoc).
|
||||
No target requires anything the user must install. ADR-ci-003.)*
|
||||
- [ ] **D3** Released via prebuilt binaries plus Homebrew, Scoop,
|
||||
`winget`, and `cargo binstall`.
|
||||
*(Prebuilt binaries + checksums now published to Gitea releases
|
||||
(D1); the package-manager manifests (Homebrew / Scoop / winget /
|
||||
`cargo binstall`) remain to do. The asset naming
|
||||
`rdbms-playground-<tag>-<target>` is already binstall-friendly.
|
||||
Tracked under ADR-ci-003 "Deferred".)*
|
||||
|
||||
## TUI shell
|
||||
|
||||
@@ -250,16 +271,13 @@ since ADR-0027.)
|
||||
|
||||
## App-level commands (per ADR-0003)
|
||||
|
||||
- [/] **A1** All canonical app-level commands implemented and
|
||||
- [x] **A1** All canonical app-level commands implemented and
|
||||
available in both modes: `save`, `save as`, `load`, `new`,
|
||||
`rebuild`, `export`, `import`, `seed`, `replay`, `undo`,
|
||||
`redo`, `mode`, `help`, `hint`, `quit`.
|
||||
*(Partial: **14 of 15** implemented and available in both modes —
|
||||
`quit`/`q`, `mode simple|advanced`, `help`, `save`, `save as`,
|
||||
`load`, `new`, `rebuild`, `export`, `import`, `replay`, `undo`,
|
||||
`redo`, and now **`seed`** (ADR-0048 / SD1, done 2026-06-11).
|
||||
**Only `hint`** (tracked as H2) remains unregistered. A1 closes
|
||||
when H2 lands.)*
|
||||
*(Done 2026-06-15: the last command, **`hint`**, landed with H2
|
||||
(ADR-0053). All 15 canonical app commands are now registered and
|
||||
available in both modes.)*
|
||||
|
||||
## DSL data commands
|
||||
|
||||
@@ -793,8 +811,21 @@ since ADR-0027.)
|
||||
`returning `) still shows the raw expression first-set —
|
||||
typing-time completion already offers the right candidates
|
||||
there, so the payoff is small.
|
||||
- [ ] **H2** `hint` provides contextual help for the current
|
||||
- [x] **H2** `hint` provides contextual help for the current
|
||||
input or the most recent error.
|
||||
*(Done 2026-06-15, ADR-0053: an **F1** keybinding gives a tier-3
|
||||
teaching hint for the live partial input (read-only overlay), and a
|
||||
submitted **`hint`** command expands on the most recent runtime error.
|
||||
A new `hint.cmd.<form>` / `hint.err.<class>` catalogue tier
|
||||
(`what`/`example`/`concept`) covers every command form + the 9 runtime
|
||||
error classes, enforced by a comprehensiveness coverage test. Deferred:
|
||||
the pre-submit-diagnostic route + `diagnostic.*` blocks (#38),
|
||||
clause-concept hints (#37). **Content verified 2026-06-15 (handoff-71):**
|
||||
a semantic pass over every `hint.cmd.*`/`hint.err.*` block fixed four
|
||||
errors — `create_table` (compound-PK misread), `save` (no inline name),
|
||||
`import` (hyphen-rejecting target), and `foreign_key.child_side` (wrong
|
||||
`on delete` remedy) — and added a catalogue-driven guard test that parses
|
||||
every command example in its taught mode.)*
|
||||
- [x] **H3** `help` provides general reference and per-command
|
||||
help.
|
||||
*(Done 2026-06-07: the **general reference** is `help` (no arg) —
|
||||
@@ -878,8 +909,18 @@ since ADR-0027.)
|
||||
PTY. Correcting a stale `CLAUDE.md` line that read "Tier 4 is
|
||||
wired only for the listed critical flows" — it was not wired at
|
||||
all. Genuinely deferred.)*
|
||||
- [ ] **TT5** CI runs all tiers on Linux, macOS, and Windows on
|
||||
- [/] **TT5** CI runs all tiers on Linux, macOS, and Windows on
|
||||
stable Rust.
|
||||
*(Partial, 2026-06-15. **CI is live** on the self-hosted Gitea
|
||||
Actions (`docs/ci/adr/`): the gate runs `clippy -D warnings` +
|
||||
`cargo test` (Tiers 1–3) on the **Linux** runner for every branch
|
||||
push / PR, and `release-macos` runs the suite natively on the
|
||||
**macOS** runner. **Windows is build-only** — cross-compiled, not
|
||||
executed (no Windows runner). **Tier 4** (PTY, TT4) is still
|
||||
unwired, so "all tiers" is not yet fully met. "Stable Rust" is
|
||||
satisfied by the flake's pinned `1.95.0` (a stable release, not
|
||||
nightly). Remaining for full TT5: a Windows execution runner and
|
||||
Tier-4 PTY in CI.)*
|
||||
|
||||
## Cross-cutting
|
||||
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
# ADR-website-001: Public website and documentation site
|
||||
|
||||
## Status
|
||||
|
||||
Accepted (2026-06-04). Implementation plan:
|
||||
[`docs/website/plans/20260604-website-implementation-plan.md`](../plans/20260604-website-implementation-plan.md).
|
||||
|
||||
> History: drafted as ADR-0042, renamed to ADR-0044 (each collided with a
|
||||
> number `main` had independently assigned — H1a took 0042, compound-PK FK
|
||||
> took 0043, then relationship-visualization took 0044). Moved to the
|
||||
> website ADR namespace (`docs/website/adr/`, id **ADR-website-001**) on
|
||||
> 2026-06-10 to end the recurring cross-branch number collision: website
|
||||
> decision records now draw from their own dated sequence and never the
|
||||
> main global ADR pool (see ADR-0000 "Numbering discipline"). Content is
|
||||
> unchanged from the original draft.
|
||||
|
||||
## Context
|
||||
|
||||
RDBMS Playground is nearing its first public release and needs a public
|
||||
website that does two jobs: **attract** — a landing page that shows the
|
||||
playground in action — and **document** — a thorough, canonical reference
|
||||
for everything the playground can do.
|
||||
|
||||
The documentation-heavy surface is already implemented and verified (full
|
||||
simple- and advanced-mode command set, the ten-type vocabulary,
|
||||
relationships, constraints, indexes, EXPLAIN, undo/history/replay, projects,
|
||||
export/import, the teaching echo, clipboard, friendly errors, tab completion
|
||||
and syntax highlighting; 2151 tests passing at the time of writing). The
|
||||
site is therefore largely a presentation-and-writing effort, not a
|
||||
wait-for-features one. A grounded inventory of what is shippable now lives
|
||||
in the implementation plan.
|
||||
|
||||
Several choices here had no canonical default; they were settled during a
|
||||
planning + `/runda` pass with the user and are recorded below.
|
||||
|
||||
## Decision
|
||||
|
||||
1. **Stack — Astro 6 + Starlight + Tailwind v4.** Astro's content-first,
|
||||
zero-JS-by-default model with the Starlight docs theme fits a
|
||||
marketing-landing-plus-heavy-docs site better than the alternative
|
||||
considered, SvelteKit + Tailwind (the usual go-to here). Interactive
|
||||
pieces are added as Astro islands (Svelte or vanilla), so Svelte is still
|
||||
available where it earns its place. Tailwind v4 is wired via the official
|
||||
`@tailwindcss/vite` plugin; the `@astrojs/starlight-tailwind` plugin
|
||||
bridges Tailwind with Starlight's theming.
|
||||
|
||||
2. **Demo medium — asciinema.** Showcase sequences are recorded as
|
||||
asciinema `.cast` files (text-based, small, faithful to the full
|
||||
alternate-screen render) and embedded with `asciinema-player`. The same
|
||||
casts are reused inline in the docs — one recording format serves both
|
||||
the landing page and documentation enrichment. Recordings are produced by
|
||||
a **scripted-input driver** that types commands into a real PTY with
|
||||
viewer-friendly pacing; the app's own `history.log` **replay** (ADR-0034)
|
||||
re-executes commands without typing animation or pacing and is therefore
|
||||
suitable only for state-deterministic docs snippets, not the hero demo.
|
||||
|
||||
3. **In-page WASM playground — deferred** (OOS: **deferred**, not rejected).
|
||||
A live, type-it-yourself playground compiled from the Rust app to
|
||||
WebAssembly is desirable but is a multi-week sub-project, so it does not
|
||||
block the site. The demo section is designed with a stable seam (a single
|
||||
`Demo` component contract) so a WASM playground island can replace the
|
||||
asciinema player later with no change to call sites. Recorded boundary
|
||||
for that future work:
|
||||
- **Portable core (runs on `wasm32-unknown-unknown` largely as-is):**
|
||||
`src/dsl/*` (parser, types, grammar, walker), the pure `App::update()`,
|
||||
`ui.rs`, `theme.rs`, `friendly/*`, output rendering; an in-memory DB
|
||||
path already exists (`Connection::open_in_memory()`). `rusqlite`
|
||||
compiles to the browser target via its `ffi-sqlite-wasm-rs` feature.
|
||||
- **Native edge needing `cfg`-gated browser replacements:** the
|
||||
multi-thread Tokio runtime + the dedicated DB **worker thread**
|
||||
(ADR-0010) → current-thread/in-line async; `crossterm` terminal +
|
||||
event-stream → a browser backend (e.g. Ratzilla's DOM/Canvas) + DOM
|
||||
events; `arboard`, `zip`, file persistence (ADR-0015), file logging;
|
||||
and the rusqlite **backup-API** undo (ADR-0006) → a SQL dump/restore.
|
||||
When taken up, this becomes its own ADR + iteration plan.
|
||||
|
||||
4. **Hosting — portable static build; Cloudflare is the target (decided
|
||||
2026-06-11).** Astro 6 builds to static HTML/CSS with no adapter, so the
|
||||
output deploys equally to Cloudflare, Vercel, Netlify, or GitHub Pages — we
|
||||
stay uncoupled from any one host. **Planned pipeline: Gitea Actions →
|
||||
Cloudflare.** Cloudflare now steers new projects to **Workers (static
|
||||
assets)** over Pages; either serves the static `dist/` and needs no Astro
|
||||
adapter (the `@astrojs/cloudflare` adapter is only for SSR, which the site
|
||||
does not use). The future in-page WASM playground (§3), if it needs
|
||||
COOP/COEP headers, can get them from Cloudflare `_headers`. **CI implemented
|
||||
2026-06-15** (`.gitea/workflows/website.yaml`): a push touching `website/**`
|
||||
builds the static site with pnpm and deploys `dist/` to the Cloudflare Pages
|
||||
project **`relplay`** via `wrangler` (Direct Upload — no Git integration).
|
||||
The `--branch` label selects environment against the project's production
|
||||
branch (`main`): **`main` → production (`relplay.org`)**, **`website` →
|
||||
preview (`website.relplay.pages.dev`)**, with `staging.relplay.org` attachable
|
||||
to the `website` branch alias. The crate's CI gate (`ci.yaml`) skips
|
||||
website-only pushes; the build is pure-Node (the `.cast` files are committed,
|
||||
so no cargo). Secrets: `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID`.
|
||||
|
||||
5. **Repo topology — monorepo.** The site lives under `website/` in the
|
||||
playground repo; the crate stays at the repo root. The repo as a whole
|
||||
moves to its public home later; site and crate travel together.
|
||||
|
||||
6. **Canonical docs home — the website.** User-facing documentation lives on
|
||||
the site. In-repo `docs/` keeps ADRs, handoffs, and development notes;
|
||||
`docs/simple-mode-limitations.md` (requirement DOC1) was a development aid
|
||||
and now *feeds* the site's content rather than competing with it. The
|
||||
sharing recipes promised by requirement E2 become a docs page.
|
||||
|
||||
7. **Documentation scope and conventions.** Document the **full supported
|
||||
feature set**. Any capability not yet fully implemented (a small minority
|
||||
— e.g. multi-line input, query cancellation, `seed`, `m:n` convenience,
|
||||
ER-diagram export, the `show tables`/`relationships`/`indexes` family) is
|
||||
either omitted or carries a clear **"planned / not yet available"**
|
||||
callout — never presented as shipped. Two wording rules bind all
|
||||
user-facing copy:
|
||||
- **No engine name** (SQLite/STRICT/rusqlite/PRAGMA) — continues the
|
||||
user-facing posture of ADR-0002; copy says "the database"/"the engine".
|
||||
- **No "DSL"** — it is internal jargon. The two input modes are **simple
|
||||
mode** (the playground's keyword command language) and **advanced
|
||||
mode** (SQL).
|
||||
|
||||
8. **Install documentation — two mechanisms.** The install page documents
|
||||
**prebuilt release binaries** (self-hosted download — not GitHub
|
||||
Releases, since the repo will move) and **package managers**. Both can be
|
||||
written now against the planned mechanisms; concrete download URLs slot in
|
||||
at release. (Distribution items D1–D3 in `requirements.md` remain the
|
||||
tracking home for the release tooling itself.)
|
||||
|
||||
## Consequences
|
||||
|
||||
- The site can ship on the strength of already-implemented features; it is
|
||||
gated on writing and recording, not on finishing the app.
|
||||
- One recording format (asciinema `.cast`) serves both marketing and docs,
|
||||
and is reusable as the app evolves (re-run the script, re-record).
|
||||
- The WASM playground is preserved as a real future option without holding
|
||||
up launch; the demo seam keeps the upgrade cheap.
|
||||
- A single canonical docs home removes the divergence risk of maintaining
|
||||
user docs in two places.
|
||||
- Website build choices (Decisions 1, 2, 4, 5) are recorded here for
|
||||
traceability but do not, by themselves, warrant further ADRs; only
|
||||
app-architecture decisions (notably the future WASM port) will.
|
||||
|
||||
## Out of scope
|
||||
|
||||
- **In-page WASM playground** — *deferred* (see Decision 3); revisit as its
|
||||
own ADR + iteration plan.
|
||||
- **Hosted/SaaS playground or a server-backed doc CMS** — *rejected*: a
|
||||
static site fully satisfies the need, consistent with ADR-0007's
|
||||
no-hosted-publishing stance. Revisit only if real demand emerges.
|
||||
@@ -0,0 +1,19 @@
|
||||
# Website Architecture Decision Records
|
||||
|
||||
Decision records for the **public website + documentation site** subproject
|
||||
(the Astro/Starlight site under `website/`). These are kept in their own
|
||||
namespace, separate from the project-wide ADRs in
|
||||
[`docs/adr/`](../../adr/README.md), so website decisions never compete with
|
||||
the main global ADR sequence for numbers — see
|
||||
[ADR-0000 "Numbering discipline"](../../adr/0000-record-architecture-decisions.md).
|
||||
|
||||
**Numbering.** Files are named `<date>-adr-website-<NNN>.md` and referenced
|
||||
in prose as `ADR-website-NNN`. The `<date>` (the ADR's accepted/created day,
|
||||
`YYYYMMDD`) plus the `website` segment keeps the namespace disjoint from
|
||||
`main`'s integers. Assign the next free `NNN` from this index. Every ADR
|
||||
change updates this index in the same edit (the ADR-0000 index-upkeep rule
|
||||
applies here too).
|
||||
|
||||
## Index
|
||||
|
||||
- [ADR-website-001 — Public website and documentation site](20260604-adr-website-001.md) — **Accepted 2026-06-04** (formerly ADR-0044 in the main index; moved here 2026-06-10 to end recurring cross-branch number collisions). The first public website: a marketing landing page plus the **canonical** user docs. Stack **Astro 6 + Starlight + Tailwind v4** (chosen over SvelteKit + Tailwind for a docs-heavy + marketing site; interactive bits as Astro islands). Showcase demos are **asciinema** `.cast` recordings (scripted-input driver for paced, re-recordable sessions — *not* `history.log` replay), reused inline in docs. The **in-page WASM playground is deferred** (OOS: deferred) behind a stable `Demo` seam, with the portable-core vs native-edge boundary recorded for a future ADR + iteration plan. Portable **static build** (**Cloudflare** target via **Gitea Actions**, host-agnostic); **no CI yet**; **monorepo** (`website/`). Docs cover the **full supported feature set** with "planned" callouts for the unshipped minority; two wording rules bind user-facing copy — **no engine name** (continues ADR-0002) and **no "DSL"** ("simple mode" / "advanced mode"). Install docs cover **prebuilt binaries + package managers** (D1–D3 track the release tooling). Plan: [`docs/website/plans/20260604-website-implementation-plan.md`](../plans/20260604-website-implementation-plan.md)
|
||||
@@ -0,0 +1,198 @@
|
||||
# Plan: public website and documentation site
|
||||
|
||||
**Date:** 2026-06-04 · **Status:** ready to build
|
||||
|
||||
Decisions for this work are recorded in
|
||||
[ADR-website-001](../adr/20260604-adr-website-001.md): Astro 6 +
|
||||
Starlight + Tailwind v4; asciinema demos reusable in docs; the in-page WASM
|
||||
playground deferred behind a stable demo seam; portable static hosting
|
||||
(Vercel target); monorepo (`website/`); website is the canonical docs home;
|
||||
full-feature-set docs with "planned" callouts; install docs cover prebuilt
|
||||
binaries + package managers. This plan is the *how*.
|
||||
|
||||
## Repository layout
|
||||
|
||||
The site lives under `website/` in this repo; the crate stays at the root.
|
||||
|
||||
```
|
||||
website/
|
||||
├── package.json # pnpm; astro, @astrojs/starlight, tailwind v4
|
||||
├── astro.config.mjs # Starlight integration + sidebar nav
|
||||
├── src/
|
||||
│ ├── pages/index.astro # marketing landing (custom, not Starlight)
|
||||
│ ├── components/
|
||||
│ │ ├── Demo.astro # demo SLOT — the WASM-playground seam
|
||||
│ │ └── Cast.astro # asciinema-player island wrapper
|
||||
│ ├── content/docs/ # Starlight MDX docs (the bulk of the work)
|
||||
│ └── styles/ # shared Tailwind + Starlight theme tokens
|
||||
├── public/casts/ # recorded *.cast asciinema files
|
||||
├── README.md # local dev + recording recipe
|
||||
└── STYLE.md # living documentation style guide
|
||||
```
|
||||
|
||||
Root `.gitignore` gains `website/node_modules`, `website/dist`,
|
||||
`website/.astro`.
|
||||
|
||||
## Documentation inventory (grounded — drives Phase D scope)
|
||||
|
||||
Built from `docs/handoff/55–59`, `docs/adr/*`, the command REGISTRY
|
||||
(`src/dsl/grammar/mod.rs:603`, which also auto-assembles in-app `help`), the
|
||||
`Command` enum (`src/dsl/command.rs:149`), and
|
||||
`src/friendly/strings/en-US.yaml` — **not** the coarse `requirements.md`
|
||||
checkboxes (handoff-59 found those ~46% mis-marked; they now use a `[/]`
|
||||
"partial" legend — trust the code, not the marker). Refreshed **2026-06-09
|
||||
after merging `main`**, which added the show-list/detail, `help <command>`,
|
||||
and compound-PK FK surface (see the dedicated bullet below). Test state:
|
||||
**2193 passing, 0 failing, 1 ignored.**
|
||||
|
||||
**SHIPPED — document as-is (the doc core):**
|
||||
- Input modes: simple, advanced (SQL), `:` one-shot escape, `mode` command,
|
||||
per-project mode restore (ADR-0003/0015/0037).
|
||||
- Full simple-mode command surface: create/drop table; add/drop/rename/
|
||||
change column; add/drop 1:n relationship (named, ON DELETE/UPDATE
|
||||
CASCADE/SET NULL/RESTRICT, `--create-fk`); add/drop index; insert/update/
|
||||
delete (required WHERE + `--all-rows`; complex WHERE: AND/OR/NOT, LIKE,
|
||||
IS NULL, IN, BETWEEN); show table/data (where/limit); add/drop constraint;
|
||||
explain (ADR-0009/0013/0014/0025/0026/0028/0029).
|
||||
- Full advanced-mode SQL: CREATE/DROP/ALTER TABLE (cols, constraints, inline
|
||||
+ table FKs, rename, alter-column-type), CREATE [UNIQUE]/DROP INDEX; SELECT
|
||||
(joins, GROUP BY/HAVING, ORDER BY, LIMIT/OFFSET, UNION/INTERSECT/EXCEPT,
|
||||
WITH [RECURSIVE] CTEs); INSERT (multi-row, ON CONFLICT, RETURNING)/UPDATE/
|
||||
DELETE; full expression grammar incl. CASE, CAST, curated functions;
|
||||
EXPLAIN over SQL (ADR-0030–0039).
|
||||
- Types: all ten, advanced-mode SQL aliases, serial/shortid auto-fill
|
||||
(ADR-0005/0011/0017/0018). Constraints: PK incl. compound, NOT NULL,
|
||||
UNIQUE, CHECK, DEFAULT, FK (ADR-0029/0013/0035).
|
||||
- Undo/redo, history.log journal, replay, `--resume`, `--no-undo`
|
||||
(ADR-0006/0034). Projects & storage: project.yaml + CSV + history.log,
|
||||
save/save as/load/new/rebuild, temp projects, `--data-dir`
|
||||
(ADR-0004/0015). Export/import (zip), clipboard copy/copy all/copy last
|
||||
(ADR-0007/0041).
|
||||
- Friendly errors (all five categories) + validity indicator
|
||||
(ADR-0019/0027), DSL→SQL teaching echo (ADR-0038), EXPLAIN plan tree
|
||||
(ADR-0028), box-drawing tables (ADR-0016), tab completion + syntax
|
||||
highlighting + in-line editing (ADR-0022).
|
||||
- **Added by the `main` merge (2026-06-09):** schema-inspection commands
|
||||
`show tables` / `show relationships` / `show indexes` and the singular
|
||||
`show relationship <name>` / `show index <name>` detail views (V5/V5a);
|
||||
`help [<command>]` per-command detail + `help types` + general reference
|
||||
(H3); **compound-primary-key foreign-key references** — DSL
|
||||
`from <P>.(a, b) to <C>.(x, y)` and SQL `FOREIGN KEY (a, b) REFERENCES
|
||||
P(x, y)` (single-column form unchanged) (ADR-0043, T3); friendlier
|
||||
parse-error near-miss messaging (H1a, ADR-0042). These need coverage: a
|
||||
schema-inspection page (the `show` family) and compound-FK examples on the
|
||||
Relationships page.
|
||||
|
||||
**DOCUMENT WITH CAVEAT:** `add unique index` is advanced-only; simple-mode
|
||||
table rename is intentionally absent (rename is `ALTER TABLE … RENAME TO`);
|
||||
`hint` (H2) is still partial; a compound-FK *violation* message names only
|
||||
the first column pair (enforcement is correct — a messaging-only residual).
|
||||
|
||||
**OMIT or MARK "planned":** multi-line input (I1), readline shortcuts (I1b),
|
||||
in-flight cancellation / query timeout (I5/B3), `seed` (SD1), `m:n`
|
||||
convenience (C4), one-step modify relationship (C3a), relationship line-art
|
||||
(V1), ER-diagram export (V3), session-log + Markdown export (V4).
|
||||
|
||||
**Mine verbatim for docs:** `en-US.yaml` `help.app.*`, `help.ddl.*`,
|
||||
`help.data.*`, `help.types_reference`, `parse.usage.*` (one-line syntax
|
||||
templates), `hint.*` — keeps docs and in-app help consistent.
|
||||
|
||||
## Phases
|
||||
|
||||
### A — Scaffold
|
||||
`pnpm create astro@latest` (Starlight template) in `website/`; `astro add
|
||||
tailwind` (Tailwind v4 via `@tailwindcss/vite`); add
|
||||
`@astrojs/starlight-tailwind`. Confirm `pnpm dev` serves and `pnpm build`
|
||||
emits a static `dist/`. Echo build steps for traceability.
|
||||
|
||||
### B — Landing page
|
||||
Custom `src/pages/index.astro` (Starlight owns `/docs/*`). Hero + value prop
|
||||
("learn relational databases by doing"), feature highlights from the
|
||||
inventory, an embedded demo cast above the fold. Use the `frontend-design`
|
||||
skill to avoid generic AI aesthetics; honour NFR-4/5/7 (distinctive design,
|
||||
meaningful colour, light/dark).
|
||||
|
||||
### C — asciinema recording workflow
|
||||
Record real `rdbms-playground` sessions to `public/casts/*.cast` using a
|
||||
**scripted-input driver** (e.g. `asciinema-automation`/autocast, or an
|
||||
expect/doitlive script) for paced, re-recordable demos. Record at a fixed
|
||||
sensible cols×rows; provide light + dark player themes. `Cast.astro` wraps
|
||||
`asciinema-player` as a `client:visible` island; the same component embeds
|
||||
casts inline in docs. Document the recipe in `website/README.md`.
|
||||
(`asciinema` 2.4.0 is installed.)
|
||||
|
||||
### D — Documentation (the bulk)
|
||||
**Five** top-level sidebar sections (autogenerated per directory). The key
|
||||
split: *Using the playground* = the application you drive; *Reference* = the
|
||||
database language you build with.
|
||||
- **Getting started** — install (prebuilt binaries + package managers),
|
||||
first project, simple vs. advanced mode, the example library.
|
||||
- **Using the playground** — command-line options; the assistive editor
|
||||
(completion, syntax highlighting, the `[ERR]`/`[WRN]` validity indicator,
|
||||
hints, in-line editing); the output pane (PageUp/PageDown scrolling — the
|
||||
fuller V4 session-log / Markdown export is *planned*, mark it); projects
|
||||
(save / load / new / rebuild); undo, redo & history (+ replay); export &
|
||||
import (E2 recipes); copy to clipboard; getting help (`help` /
|
||||
`help <command>` / `hint`). (ADR-0003 "app-level commands" + ADR-0022/0027
|
||||
typing assistance + the CLI.)
|
||||
- **Guides** — task walkthroughs.
|
||||
- **Reference** — the database language: Tables, Columns, Relationships,
|
||||
Indexes, Constraints, Inserting & editing data, Querying & inspecting
|
||||
(`show` / `select`), Types, Query plans (EXPLAIN), Errors explained, the
|
||||
simple-command → SQL teaching echo.
|
||||
- **Concepts** — the *why*: projects & storage model, the derived database,
|
||||
how undo works.
|
||||
|
||||
**Surface the assistive editor prominently** — it is a differentiator and
|
||||
most helps beginners: a landing-page card + a Getting-started mention, both
|
||||
linking into *Using the playground*. It is prime asciinema-cast material
|
||||
(completion / validity indicator are motion a still code block can't show).
|
||||
|
||||
Build order: Tier 1 simple-mode reference + types + constraints + input
|
||||
modes + mined help/usage strings → Tier 2 advanced SQL + relationships +
|
||||
project lifecycle + undo/history → Tier 3 teaching echo + EXPLAIN + errors +
|
||||
completion/highlighting → Tier 4 clipboard + hints + editing.
|
||||
|
||||
Conventions live in the **living style guide** `website/STYLE.md` (binding
|
||||
rules from ADR-website-001 §7 — no engine name, **no "DSL"**, "planned" callouts —
|
||||
plus finer conventions and an open-decisions log for depth/splitting/example
|
||||
dataset/etc. as they settle). Sources to mine: `src/dsl/command.rs`,
|
||||
`src/dsl/grammar/*`, the REGISTRY, `en-US.yaml`, `docs/adr/*`,
|
||||
`docs/simple-mode-limitations.md`.
|
||||
|
||||
### E — Hosting & portability
|
||||
Keep the default static build (no adapter); `dist/` deploys to Vercel or any
|
||||
static host. `website/README.md` notes the Vercel preset (root dir
|
||||
`website/`) and the one-line `@astrojs/vercel` switch if SSR is ever needed.
|
||||
|
||||
## Demo seam (WASM hook)
|
||||
|
||||
`Demo.astro` exposes a stable contract (`{ src, title, height, autoplay }`).
|
||||
At launch it renders `Cast.astro`; later a `Playground.astro` WASM island
|
||||
swaps in behind the same props on the landing page and in docs, with zero
|
||||
call-site changes. Boundary details are in ADR-website-001 §3.
|
||||
|
||||
## Verification
|
||||
|
||||
- `pnpm dev` renders landing + docs; `pnpm build` emits a clean static
|
||||
`dist/` with no errors/warnings.
|
||||
- Landing shows at least one playing `.cast`; the same component renders a
|
||||
cast inline in a docs page (proves reuse).
|
||||
- Starlight link-check passes (broken internal links fail the build).
|
||||
- Docs grep clean of forbidden terms: **no "DSL"**, no engine name.
|
||||
- A `dist/` static deploy works on Vercel (manual import) — confirms
|
||||
portability. (No CI gate yet, per ADR-website-001 §4.)
|
||||
|
||||
## Notes / recommendations (non-blocking)
|
||||
|
||||
- **Doc drift:** consider generating the command reference from source (the
|
||||
`help` REGISTRY / `en-US.yaml`) rather than hand-writing all of it.
|
||||
- **Accessibility/SEO:** pair each hero `.cast` with a text transcript or the
|
||||
equivalent docs snippet.
|
||||
- **Branding/domain & analytics** unspecified — assume none until decided;
|
||||
no third-party trackers without consent.
|
||||
- Tailwind v4 + Starlight have occasional theme-token friction; the
|
||||
`@astrojs/starlight-tailwind` plugin is the supported bridge.
|
||||
- Starlight ships local search (Pagefind) by default.
|
||||
- No `README.md` exists at the repo root yet — wanted for the destination
|
||||
repo; out of this plan's core scope but flagged.
|
||||
Generated
+82
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1780902259,
|
||||
"narHash": "sha256-q8yYEC5f1mFlQO9RGna4LTc9QrcvWunX6FYp83munkQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bd0ff2d3eac24699c3664d5966b9ef36f388e2ca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-26.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781234414,
|
||||
"narHash": "sha256-HdA+P4fKRGOomkewnI/Tww5Wz4xK1O7+hDO90YAsPB4=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "1d18bfe3de6244c641ca4e8011186d0981b81d76",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
description = "RDBMS Playground — Rust TUI dev environment + reproducible build";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
|
||||
rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, rust-overlay, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ (import rust-overlay) ];
|
||||
};
|
||||
|
||||
# Single source of the Rust toolchain: the rustup toolchain file.
|
||||
# rust-overlay provisions the exact channel + components declared there,
|
||||
# so the dev shell and the build package share one pinned toolchain.
|
||||
rust = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
|
||||
|
||||
# Read the package version straight from Cargo.toml so it never drifts
|
||||
# from the crate metadata (no hand-maintained duplicate here).
|
||||
cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
||||
|
||||
# System build inputs are deliberately tiny — this is a pure-Rust TUI:
|
||||
# * libsqlite3-sys is built with the `bundled` feature, so SQLite is
|
||||
# compiled from vendored C. That needs a C compiler, which the
|
||||
# stdenv provides automatically (no entry required here).
|
||||
# * arboard's clipboard backend is `x11rb` — a pure-Rust socket XCB
|
||||
# client. It links no C X11 libraries, so none appear below. A live
|
||||
# X server is only needed at *runtime* to copy; headless sessions
|
||||
# fall back to OSC 52.
|
||||
# If a future dependency introduces a pkg-config / native-lib link, add
|
||||
# it here (and document why) rather than leaking it into the host env.
|
||||
nativeBuildInputs = [ ];
|
||||
buildInputs = [ ];
|
||||
|
||||
# `nix build` → the release binary, built reproducibly from the pinned
|
||||
# toolchain and the committed Cargo.lock (importCargoLock fetches each
|
||||
# dependency by its lockfile checksum — offline, no cargoHash to churn).
|
||||
# CI's release job consumes this artifact; the gate's tests run
|
||||
# separately via `nix develop -c cargo test` (see below), so the package
|
||||
# build skips the suite — the nix sandbox has no HOME/X server and would
|
||||
# fight the project-dirs / clipboard paths the tests touch.
|
||||
rdbms-playground = pkgs.rustPlatform.buildRustPackage {
|
||||
pname = cargoToml.package.name;
|
||||
version = cargoToml.package.version;
|
||||
src = ./.;
|
||||
cargoLock.lockFile = ./Cargo.lock;
|
||||
inherit nativeBuildInputs buildInputs;
|
||||
doCheck = false;
|
||||
};
|
||||
in {
|
||||
packages.default = rdbms-playground;
|
||||
packages.rdbms-playground = rdbms-playground;
|
||||
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = buildInputs ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
|
||||
# macOS release builds (aarch64/x86_64-apple-darwin) link AppKit
|
||||
# (arboard) + libSystem; the Apple SDK provides those framework/
|
||||
# system-lib stubs as *system* paths (/usr/lib, /System/Library).
|
||||
# NOTE: the darwin stdenv still propagates a *nix-store* libiconv and
|
||||
# links it regardless of inputs, so the release workflow rewrites that
|
||||
# one load path to /usr/lib/libiconv.2.dylib (install_name_tool) and
|
||||
# re-signs — see release-macos / the macOS smoke-test. Adding
|
||||
# `pkgs.libiconv` here would only reinforce the wrong path, so don't.
|
||||
pkgs.apple-sdk
|
||||
];
|
||||
nativeBuildInputs = nativeBuildInputs ++ [
|
||||
rust
|
||||
# Dev-disk maintenance: cargo never garbage-collects stale per-hash
|
||||
# build artifacts, so target/ creeps into the tens of GB (see
|
||||
# CLAUDE.md "Build hygiene"). cargo-sweep prunes them; run it
|
||||
# periodically between milestones.
|
||||
pkgs.cargo-sweep
|
||||
] ++ pkgs.lib.optionals pkgs.stdenv.isLinux [
|
||||
# Cross-compilation for the non-macOS D1 targets: `cargo zigbuild`
|
||||
# uses Zig's bundled clang + libc as one universal cross cc/linker
|
||||
# (incl. the `cc`-crate compile of rusqlite's bundled SQLite C) for
|
||||
# Linux musl + Windows gnu/gnullvm. macOS builds natively with the
|
||||
# Apple toolchain on the Mac runner, so these are Linux-only.
|
||||
pkgs.cargo-zigbuild
|
||||
pkgs.zig
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
echo "RDBMS Playground dev shell ($(uname -s))"
|
||||
echo " rust: $(rustc --version | cut -d' ' -f1-2)"
|
||||
echo " cargo: $(cargo --version | cut -d' ' -f1-2)"
|
||||
'';
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
[toolchain]
|
||||
# Pinned to an exact stable release (not the floating "stable" channel) so
|
||||
# `nix flake update` cannot surprise-bump Rust into new clippy lints that would
|
||||
# fail the `-D warnings` CI gate. Matches the host toolchain and the datamage
|
||||
# flake's convention (its ADR 0046). Bump deliberately, in its own commit.
|
||||
channel = "1.95.0"
|
||||
# rustfmt + clippy back the `fmt`/`clippy` CI stages; no coverage or WASM
|
||||
# tooling is needed here (pure-Rust TUI).
|
||||
components = ["rustfmt", "clippy"]
|
||||
# The non-macOS D1 release matrix, all cross-built from Linux x86_64 via
|
||||
# `cargo zigbuild` (D1: cross-platform binaries; D2: single static binary).
|
||||
# Linux uses musl + crt-static for fully static, portable binaries; Windows
|
||||
# uses the gnu/gnullvm ABIs (Zig statically links libc, so the .exe is
|
||||
# standalone). macOS is deferred — its arboard/AppKit link needs Apple's SDK,
|
||||
# which a Linux runner can't supply cleanly (see docs/ci/adr ADR-ci-001).
|
||||
targets = [
|
||||
"x86_64-unknown-linux-musl",
|
||||
"aarch64-unknown-linux-musl",
|
||||
"x86_64-pc-windows-gnu",
|
||||
"aarch64-pc-windows-gnullvm",
|
||||
# macOS — built natively on the Apple-Silicon Mac runner (aarch64 native,
|
||||
# x86_64 cross). These need Apple's SDK to link, which a Linux runner can't
|
||||
# supply, so they are produced only on the Mac (see docs/ci/adr ADR-ci-003).
|
||||
"aarch64-apple-darwin",
|
||||
"x86_64-apple-darwin",
|
||||
]
|
||||
+503
-5
@@ -271,6 +271,13 @@ pub struct App {
|
||||
pub nav_focus: NavFocus,
|
||||
pub output: VecDeque<OutputLine>,
|
||||
pub hint: Option<String>,
|
||||
/// Catalog class key of the most recent runtime error (H2 /
|
||||
/// ADR-0053 D5), e.g. `foreign_key.child_side`. Set when a
|
||||
/// friendly error is rendered, cleared on the next successful
|
||||
/// command. The submitted `hint` command and empty-input F1 use
|
||||
/// it to render that error's tier-3 `hint.err.<class>` block.
|
||||
/// `None` → no recent error → the "getting started" pointer.
|
||||
pub last_error_hint_key: Option<String>,
|
||||
/// The validity indicator's currently-visible verdict
|
||||
/// (ADR-0027). `None` means the indicator shows nothing —
|
||||
/// the input is clean, or it is hidden mid-typing while the
|
||||
@@ -513,14 +520,16 @@ const HISTORY_CAPACITY: usize = 1000;
|
||||
/// produces a glyph of its own (and so needs no badge) — ADR-0047 D2.
|
||||
///
|
||||
/// The set is exactly the *otherwise-invisible* keys: motion, editing,
|
||||
/// submission, and the `Ctrl-O` navigation toggle. Plain character keys
|
||||
/// already appear on the input line, and `Ctrl-C` (quit) / `Ctrl+]`
|
||||
/// (the caption toggle) are deliberately excluded. Pure and total, so
|
||||
/// it is exhaustively unit-testable without a running app.
|
||||
/// submission, the `Ctrl-O` navigation toggle, and the `Ctrl-G` F1-alias
|
||||
/// (ADR-0047 amendment). Plain character keys already appear on the input
|
||||
/// line, and `Ctrl-C` (quit) / `Ctrl+]` (the caption toggle) are
|
||||
/// deliberately excluded. Pure and total, so it is exhaustively
|
||||
/// unit-testable without a running app.
|
||||
pub const fn demo_badge_label(key: &KeyEvent) -> Option<&'static str> {
|
||||
match (key.code, key.modifiers) {
|
||||
(KeyCode::Tab, _) => Some("[TAB]"),
|
||||
(KeyCode::BackTab, _) => Some("[SHIFT-TAB]"),
|
||||
(KeyCode::F(1), _) => Some("[F1]"),
|
||||
(KeyCode::Enter, _) => Some("[ENTER]"),
|
||||
(KeyCode::Esc, _) => Some("[ESC]"),
|
||||
(KeyCode::Up, _) => Some("[UP]"),
|
||||
@@ -533,8 +542,12 @@ pub const fn demo_badge_label(key: &KeyEvent) -> Option<&'static str> {
|
||||
(KeyCode::PageDown, _) => Some("[PGDN]"),
|
||||
(KeyCode::Backspace, _) => Some("[BKSP]"),
|
||||
(KeyCode::Delete, _) => Some("[DEL]"),
|
||||
// The only badged control chord: the ADR-0046 navigation toggle.
|
||||
// The ADR-0046 navigation toggle.
|
||||
(KeyCode::Char('o'), m) if m.contains(KeyModifiers::CONTROL) => Some("[CTRL-O]"),
|
||||
// ADR-0047 amendment: the Ctrl-G F1-alias badges AS [F1] so a
|
||||
// cast recorded by a tool that can't send F1 looks identical to a
|
||||
// real F1 press. (Only consulted in demo mode — the caller gates.)
|
||||
(KeyCode::Char('g'), m) if m.contains(KeyModifiers::CONTROL) => Some("[F1]"),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -557,6 +570,7 @@ impl App {
|
||||
nav_focus: NavFocus::Input,
|
||||
output: VecDeque::with_capacity(OUTPUT_CAPACITY),
|
||||
hint: None,
|
||||
last_error_hint_key: None,
|
||||
input_indicator: None,
|
||||
tables: Vec::new(),
|
||||
relationships: Vec::new(),
|
||||
@@ -1208,6 +1222,32 @@ impl App {
|
||||
return self.handle_nav_key(key);
|
||||
}
|
||||
|
||||
// H2 / ADR-0053: F1 is a read-only contextual-hint overlay —
|
||||
// it emits into the output journal and must NOT touch the input
|
||||
// buffer, cursor, or the completion memo, so it sits ahead of
|
||||
// the memo-clearing completion match below. Non-empty input →
|
||||
// a hint for the command being typed; empty input → expand on
|
||||
// the most recent error (or a getting-started pointer).
|
||||
//
|
||||
// ADR-0047 amendment: in demo mode, Ctrl-G is an alias for F1.
|
||||
// The cast recorder (autocast) can't emit F1 (an escape
|
||||
// sequence) but can send the single control byte Ctrl-G; it
|
||||
// badges AS [F1] (see `demo_badge_label`) so the cast is visually
|
||||
// identical to a real F1 press. Demo-gated, so the shipped keymap
|
||||
// stays F1-only.
|
||||
let hint_key = key.code == KeyCode::F(1)
|
||||
|| (self.demo_mode
|
||||
&& (key.code, key.modifiers)
|
||||
== (KeyCode::Char('g'), KeyModifiers::CONTROL));
|
||||
if hint_key {
|
||||
if self.input.trim().is_empty() {
|
||||
self.note_hint_for_recent_error();
|
||||
} else {
|
||||
self.note_hint_for_input();
|
||||
}
|
||||
return Vec::new();
|
||||
}
|
||||
|
||||
// ADR-0022 stage 8 — non-modal completion. Tab /
|
||||
// Shift-Tab cycle; Esc / Backspace undo the whole
|
||||
// last-Tab insertion in one keystroke while the memo
|
||||
@@ -1774,6 +1814,13 @@ impl App {
|
||||
// recallable. The canonical (un-prefixed) text is what reaches
|
||||
// the journal via `ExecuteDsl.source`.
|
||||
let is_app = matches!(&parsed, Ok(Command::App(_)));
|
||||
// H2 / ADR-0053 D5: a new *DSL* command supersedes the previous
|
||||
// runtime error for `hint`. App commands (incl. `hint` itself)
|
||||
// and parse errors leave it intact, so `hint` still expands the
|
||||
// last real error after, say, a `help` in between.
|
||||
if matches!(&parsed, Ok(cmd) if !matches!(cmd, Command::App(_))) {
|
||||
self.last_error_hint_key = None;
|
||||
}
|
||||
let advanced = submission_mode.is_advanced() && !is_app;
|
||||
let ring_line = if advanced {
|
||||
format!(": {effective_input}")
|
||||
@@ -1814,6 +1861,13 @@ impl App {
|
||||
}
|
||||
Vec::new()
|
||||
}
|
||||
// H2 / ADR-0053: a submitted `hint` acts on the most recent
|
||||
// runtime error (the buffer is empty post-submit). The
|
||||
// live-input surface is the F1 keybinding (handle_key).
|
||||
AppCommand::Hint => {
|
||||
self.note_hint_for_recent_error();
|
||||
Vec::new()
|
||||
}
|
||||
AppCommand::Rebuild => vec![Action::PrepareRebuild],
|
||||
AppCommand::Save => self.handle_save_command(false),
|
||||
AppCommand::SaveAs => self.handle_save_command(true),
|
||||
@@ -2422,6 +2476,10 @@ impl App {
|
||||
// runtime built before posting the event.
|
||||
let ctx = self.build_translate_context(command, facts);
|
||||
let rendered = crate::friendly::translate_error(&error, &ctx).render();
|
||||
// H2 / ADR-0053 D5: remember this error's tier-3 class so a
|
||||
// following `hint` (or empty-input F1) can expand on it.
|
||||
self.last_error_hint_key =
|
||||
crate::friendly::error_hint_class(&error, &ctx).map(String::from);
|
||||
warn!(
|
||||
verb = command.verb(),
|
||||
error = %rendered,
|
||||
@@ -3091,6 +3149,109 @@ impl App {
|
||||
}
|
||||
}
|
||||
|
||||
// ── H2 / ADR-0053: contextual `hint` ────────────────────────
|
||||
// Phase A wires the two surfaces (F1 → live input; the `hint`
|
||||
// command → most recent error) plus the tier-2 fallback. The
|
||||
// tier-3 corpus (`hint.cmd.*` / `hint.err.*`) is authored in later
|
||||
// phases; until a block exists, `emit_tier3_block` returns false
|
||||
// and the surface degrades to the ambient prose / getting-started
|
||||
// pointer — never blank.
|
||||
|
||||
/// F1 with a non-empty buffer: a tier-3 hint for the command form
|
||||
/// being typed, else the tier-2 ambient prose (ADR-0053 D2).
|
||||
/// Read-only — callers guarantee the buffer/cursor/memo are left
|
||||
/// untouched.
|
||||
fn note_hint_for_input(&mut self) {
|
||||
// `feedback_view` strips the `:` one-shot sigil and
|
||||
// `effective_mode` reflects the one-shot advanced surface, so
|
||||
// the hint matches the command the user is actually typing.
|
||||
let (view, cursor, _off) = self.feedback_view();
|
||||
let probe = view.to_string();
|
||||
let mode = self.effective_mode().as_mode();
|
||||
if let Some(id) = crate::dsl::grammar::hint_key_for_input_in_mode(&probe, mode)
|
||||
&& self.emit_tier3_block(&format!("hint.cmd.{id}"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
// Tier-2 fallback: surface the ambient prose as a persistent
|
||||
// line (computed exactly as the live panel does).
|
||||
let ambient = crate::input_render::ambient_hint_in_mode(
|
||||
&probe,
|
||||
cursor,
|
||||
self.last_completion.as_ref(),
|
||||
&self.schema_cache,
|
||||
mode,
|
||||
);
|
||||
match ambient {
|
||||
Some(crate::input_render::AmbientHint::Prose(text)) => {
|
||||
self.push_category_three_prose(text);
|
||||
}
|
||||
Some(crate::input_render::AmbientHint::Candidates { items, .. }) => {
|
||||
let names = items
|
||||
.iter()
|
||||
.map(|c| c.text.clone())
|
||||
.collect::<Vec<_>>()
|
||||
.join(", ");
|
||||
self.push_category_three_prose(crate::t!("hint.ambient_expected", expected = names));
|
||||
}
|
||||
None => self.note_getting_started(),
|
||||
}
|
||||
}
|
||||
|
||||
/// The `hint` command (and empty-input F1): expand on the most
|
||||
/// recent runtime error, else point the user at how to start
|
||||
/// (ADR-0053 D2/D5).
|
||||
fn note_hint_for_recent_error(&mut self) {
|
||||
if let Some(class) = self.last_error_hint_key.clone()
|
||||
&& self.emit_tier3_block(&format!("hint.err.{class}"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
self.note_getting_started();
|
||||
}
|
||||
|
||||
fn note_getting_started(&mut self) {
|
||||
self.note_system(crate::t!("hint.getting_started"));
|
||||
}
|
||||
|
||||
/// Render a tier-3 block (`<stem>.what` / `.example` / `.concept`)
|
||||
/// when it has been authored; returns `false` if the `what` part is
|
||||
/// absent so the caller can fall back to tier 2. `what` is
|
||||
/// mandatory, `example`/`concept` optional (ADR-0053 D3). Styling
|
||||
/// polish (the framed block) lands with the corpus.
|
||||
fn emit_tier3_block(&mut self, stem: &str) -> bool {
|
||||
let cat = crate::friendly::catalog();
|
||||
let what_key = format!("{stem}.what");
|
||||
if cat.get(&what_key).is_none() {
|
||||
return false;
|
||||
}
|
||||
// Labelled block (ADR-0053 D4): a `Hint` heading, then aligned
|
||||
// `What:` / `Example:` / `Concept:` lines. `concept` renders
|
||||
// muted (`OutputStyleClass::Hint`); the rest are plain system.
|
||||
let labelled = |label: &str, value: &str| {
|
||||
// Pad `<Label>:` to a common width so the values align.
|
||||
format!(" {:<9}{value}", format!("{label}:"))
|
||||
};
|
||||
self.note_system(crate::t!("hint.block.heading"));
|
||||
self.note_system(labelled(
|
||||
&crate::t!("hint.block.what"),
|
||||
&crate::friendly::translate(&what_key, &[]),
|
||||
));
|
||||
if cat.get(&format!("{stem}.example")).is_some() {
|
||||
self.note_system(labelled(
|
||||
&crate::t!("hint.block.example"),
|
||||
&crate::friendly::translate(&format!("{stem}.example"), &[]),
|
||||
));
|
||||
}
|
||||
if cat.get(&format!("{stem}.concept")).is_some() {
|
||||
self.push_category_three_prose(labelled(
|
||||
&crate::t!("hint.block.concept"),
|
||||
&crate::friendly::translate(&format!("{stem}.concept"), &[]),
|
||||
));
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
fn note_system(&mut self, text: impl Into<String>) {
|
||||
self.push_multiline(text.into(), OutputKind::System);
|
||||
}
|
||||
@@ -3314,6 +3475,13 @@ mod tests {
|
||||
demo_badge_label(&ke(KeyCode::Char('o'), KeyModifiers::CONTROL)),
|
||||
Some("[CTRL-O]")
|
||||
);
|
||||
// ADR-0047 amendment: the Ctrl-G F1-alias badges AS [F1], so a
|
||||
// cast recorded with autocast (which can't send F1) is visually
|
||||
// identical to a real F1 press.
|
||||
assert_eq!(
|
||||
demo_badge_label(&ke(KeyCode::Char('g'), KeyModifiers::CONTROL)),
|
||||
Some("[F1]")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -5539,6 +5707,336 @@ mod tests {
|
||||
assert!(last.text.contains("Ghost"), "{}", last.text);
|
||||
}
|
||||
|
||||
// ── H2 / ADR-0053: contextual `hint` (Phase A skeleton) ──────
|
||||
|
||||
fn f1(app: &mut App) -> Vec<Action> {
|
||||
app.update(key(KeyCode::F(1)))
|
||||
}
|
||||
|
||||
fn no_such_table_failure() -> AppEvent {
|
||||
AppEvent::DslFailed {
|
||||
command: Command::DropTable {
|
||||
name: "Ghost".to_string(),
|
||||
},
|
||||
error: crate::db::DbError::Sqlite {
|
||||
message: "no such table: Ghost".to_string(),
|
||||
kind: crate::db::SqliteErrorKind::NoSuchTable,
|
||||
},
|
||||
facts: crate::friendly::FailureContext::default(),
|
||||
source: String::new(),
|
||||
advanced: false,
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hint_command_parses_to_app_hint() {
|
||||
use crate::dsl::{parse_command, AppCommand, Command};
|
||||
assert!(matches!(
|
||||
parse_command("hint"),
|
||||
Ok(Command::App(AppCommand::Hint))
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hint_command_with_no_recent_error_shows_getting_started() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "hint");
|
||||
submit(&mut app);
|
||||
assert!(output_contains(&app, "press F1"), "{}", error_lines(&app));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_on_empty_input_with_no_error_shows_getting_started() {
|
||||
let mut app = App::new();
|
||||
let before = app.output.len();
|
||||
f1(&mut app);
|
||||
assert!(app.output.len() > before, "F1 must emit something");
|
||||
assert!(output_contains(&app, "press F1"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_is_a_read_only_overlay() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "insert into T");
|
||||
let input = app.input.clone();
|
||||
let cursor = app.input_cursor;
|
||||
let before = app.output.len();
|
||||
f1(&mut app);
|
||||
assert_eq!(app.input, input, "F1 must not change the buffer");
|
||||
assert_eq!(app.input_cursor, cursor, "F1 must not move the cursor");
|
||||
assert!(app.output.len() > before, "F1 emits a hint line");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_preserves_the_completion_memo() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "show ");
|
||||
app.update(key(KeyCode::Tab));
|
||||
assert!(app.last_completion.is_some(), "precondition: Tab sets the memo");
|
||||
let input = app.input.clone();
|
||||
f1(&mut app);
|
||||
assert!(app.last_completion.is_some(), "F1 must not clear the memo");
|
||||
assert_eq!(app.input, input, "F1 must not change the buffer");
|
||||
}
|
||||
|
||||
// ── ADR-0047 amendment: Ctrl-G is a demo-mode alias for F1 ──────
|
||||
// The cast recorder (autocast) cannot emit F1 — an escape sequence —
|
||||
// but Ctrl-G is a single legacy control byte it can send. Demo-gated
|
||||
// so the real keymap stays F1-only, and badged as [F1] (see
|
||||
// `demo_badge_label`) so a recorded cast looks identical to a genuine
|
||||
// F1 press.
|
||||
|
||||
fn ctrl_g() -> AppEvent {
|
||||
key_mod(KeyCode::Char('g'), KeyModifiers::CONTROL)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ctrl_g_in_demo_mode_aliases_f1_on_input() {
|
||||
let mut app = App::new();
|
||||
app.demo_mode = true;
|
||||
type_str(&mut app, "insert into T");
|
||||
let input = app.input.clone();
|
||||
let before = app.output.len();
|
||||
app.update(ctrl_g());
|
||||
assert_eq!(app.input, input, "Ctrl-G must not change the buffer (no `g` typed)");
|
||||
assert!(app.output.len() > before, "Ctrl-G must emit the same hint F1 does");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ctrl_g_in_demo_mode_aliases_f1_on_empty_input() {
|
||||
let mut app = App::new();
|
||||
app.demo_mode = true;
|
||||
let before = app.output.len();
|
||||
app.update(ctrl_g());
|
||||
assert!(
|
||||
app.output.len() > before,
|
||||
"Ctrl-G on empty input emits the getting-started hint"
|
||||
);
|
||||
assert!(output_contains(&app, "press F1"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ctrl_g_outside_demo_mode_is_inert() {
|
||||
// Not in demo mode: Ctrl-G is neither the hint alias nor a typed
|
||||
// glyph (the `Char(c)` insert arm excludes CONTROL), so it falls
|
||||
// through to the inert catch-all — no `g`, no hint.
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "insert");
|
||||
let input = app.input.clone();
|
||||
let before = app.output.len();
|
||||
app.update(ctrl_g());
|
||||
assert_eq!(app.input, input, "Ctrl-G must not insert a `g`");
|
||||
assert_eq!(app.output.len(), before, "Ctrl-G does nothing when demo mode is off");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dsl_failure_sets_hint_class_and_a_later_dsl_command_clears_it() {
|
||||
let mut app = App::new();
|
||||
app.update(no_such_table_failure());
|
||||
assert_eq!(app.last_error_hint_key.as_deref(), Some("not_found"));
|
||||
// A new DSL command supersedes the previous error.
|
||||
type_str(&mut app, "drop table Ghost");
|
||||
submit(&mut app);
|
||||
assert_eq!(app.last_error_hint_key, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn app_command_does_not_clear_the_hint_class() {
|
||||
let mut app = App::new();
|
||||
app.update(no_such_table_failure());
|
||||
assert_eq!(app.last_error_hint_key.as_deref(), Some("not_found"));
|
||||
// `help` (an app command) leaves the last error intact, so a
|
||||
// following `hint` still expands on it.
|
||||
type_str(&mut app, "help");
|
||||
submit(&mut app);
|
||||
assert_eq!(
|
||||
app.last_error_hint_key.as_deref(),
|
||||
Some("not_found"),
|
||||
"an app command must not clear the last error's hint class"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hint_after_error_emits_a_hint_without_panicking() {
|
||||
// Phase A: no tier-3 `hint.err.*` content exists yet, so the
|
||||
// error path falls back to the getting-started pointer. (Phase C
|
||||
// replaces this with the real error block.)
|
||||
let mut app = App::new();
|
||||
app.update(no_such_table_failure());
|
||||
let before = app.output.len();
|
||||
type_str(&mut app, "hint");
|
||||
submit(&mut app);
|
||||
assert!(app.output.len() > before, "hint must emit something");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn help_list_includes_hint() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "help");
|
||||
submit(&mut app);
|
||||
assert!(
|
||||
output_contains(&app, "explain the most recent error"),
|
||||
"help list must advertise the hint command"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn help_hint_describes_the_hint_command() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "help hint");
|
||||
submit(&mut app);
|
||||
assert!(output_contains(&app, "explain the most recent error"));
|
||||
}
|
||||
|
||||
// ── Phase B: tier-3 exemplar content renders ────────────────
|
||||
|
||||
#[test]
|
||||
fn f1_on_insert_input_renders_the_insert_hint_block() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "insert into Customers ");
|
||||
f1(&mut app);
|
||||
assert!(
|
||||
output_contains(&app, "Add one or more rows to a table"),
|
||||
"expected the insert tier-3 block"
|
||||
);
|
||||
}
|
||||
|
||||
/// Locks the rendered tier-3 block format (ADR-0053 D4): a `Hint`
|
||||
/// heading + aligned `What:` / `Example:` / `Concept:` lines.
|
||||
#[test]
|
||||
fn insert_hint_block_renders_in_the_labelled_format() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "insert into Customers ");
|
||||
f1(&mut app);
|
||||
let block = app
|
||||
.output
|
||||
.iter()
|
||||
.map(|l| l.text.as_str())
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n");
|
||||
insta::assert_snapshot!("hint_block_insert", block);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_on_add_relationship_renders_the_relationship_block() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "add 1:n relationship from Customers.id to Orders.cust ");
|
||||
f1(&mut app);
|
||||
assert!(
|
||||
output_contains(&app, "one parent, many children"),
|
||||
"expected the add-relationship tier-3 block"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_on_add_column_does_not_render_the_relationship_block() {
|
||||
// Per-form disambiguation (ADR-0053 D3): `add column` resolves
|
||||
// to `add_column` (no tier-3 block yet → tier-2 fallback), NOT
|
||||
// the relationship block — proving the multi-form node keys
|
||||
// per form, not per node.
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "add column Note text to Customers");
|
||||
f1(&mut app);
|
||||
assert!(!output_contains(&app, "one parent, many children"));
|
||||
assert!(!output_contains(&app, "1:n"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hint_renders_the_foreign_key_error_block() {
|
||||
let mut app = App::new();
|
||||
app.last_error_hint_key = Some("foreign_key.child_side".to_string());
|
||||
type_str(&mut app, "hint");
|
||||
submit(&mut app);
|
||||
assert!(
|
||||
output_contains(&app, "doesn't match any parent row"),
|
||||
"expected the FK child-side tier-3 block"
|
||||
);
|
||||
}
|
||||
|
||||
// ── Phase C batch 1: app-command hints render ───────────────
|
||||
|
||||
#[test]
|
||||
fn f1_on_an_app_command_renders_its_hint_block() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "mode advanced");
|
||||
f1(&mut app);
|
||||
assert!(
|
||||
output_contains(&app, "Switch between simple mode"),
|
||||
"expected the `mode` tier-3 block"
|
||||
);
|
||||
}
|
||||
|
||||
// ── Phase C batch 2: DDL hints render (incl. multi-form DROP) ──
|
||||
|
||||
#[test]
|
||||
fn f1_on_create_table_renders_its_hint_block() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "create table Customers with pk id(serial)");
|
||||
f1(&mut app);
|
||||
assert!(output_contains(&app, "Create a new table"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_disambiguates_drop_forms() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "drop index idx_email");
|
||||
f1(&mut app);
|
||||
// Resolves drop_index, not drop_table/column/etc.
|
||||
assert!(output_contains(&app, "Remove an index by name"));
|
||||
assert!(!output_contains(&app, "Remove a table"));
|
||||
}
|
||||
|
||||
// ── Phase C batch 3: DML hints render (incl. multi-form SHOW) ──
|
||||
|
||||
#[test]
|
||||
fn f1_on_update_renders_its_hint_block() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "update Customers set email = 'x' ");
|
||||
f1(&mut app);
|
||||
assert!(output_contains(&app, "Change values in the rows"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_disambiguates_show_forms() {
|
||||
let mut app = App::new();
|
||||
type_str(&mut app, "show relationships");
|
||||
f1(&mut app);
|
||||
assert!(output_contains(&app, "List all the relationships"));
|
||||
assert!(!output_contains(&app, "rows stored in a table"));
|
||||
}
|
||||
|
||||
// ── Phase C batch 4: advanced-SQL hints (mode-aware) ────────
|
||||
|
||||
#[test]
|
||||
fn f1_in_advanced_mode_renders_the_sql_insert_hint() {
|
||||
let mut app = App::new();
|
||||
app.mode = Mode::Advanced;
|
||||
type_str(&mut app, "insert into Customers (name) values ('x')");
|
||||
f1(&mut app);
|
||||
assert!(output_contains(&app, "Insert rows with SQL"));
|
||||
assert!(!output_contains(&app, "Add one or more rows"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f1_on_select_renders_the_select_hint() {
|
||||
let mut app = App::new();
|
||||
app.mode = Mode::Advanced;
|
||||
type_str(&mut app, "select name from Customers");
|
||||
f1(&mut app);
|
||||
assert!(output_contains(&app, "heart of SQL"));
|
||||
}
|
||||
|
||||
// ── Phase C batch 5: runtime error-class hints render ───────
|
||||
|
||||
#[test]
|
||||
fn hint_renders_a_runtime_error_block() {
|
||||
let mut app = App::new();
|
||||
app.last_error_hint_key = Some("unique".to_string());
|
||||
type_str(&mut app, "hint");
|
||||
submit(&mut app);
|
||||
assert!(output_contains(&app, "must be unique"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn messages_command_toggles_verbosity_and_reports() {
|
||||
let mut app = App::new();
|
||||
|
||||
@@ -552,6 +552,11 @@ pub enum AppCommand {
|
||||
Help {
|
||||
topic: Option<String>,
|
||||
},
|
||||
/// Show a contextual tier-3 hint (H2 / ADR-0053). No argument:
|
||||
/// when submitted, it expands on the most recent runtime error
|
||||
/// (the buffer is empty post-submit). The live-input surface is
|
||||
/// the F1 keybinding, handled in `App::handle_key`, not here.
|
||||
Hint,
|
||||
/// Rebuild `playground.db` from `project.yaml` + data/, with
|
||||
/// confirmation modal.
|
||||
Rebuild,
|
||||
@@ -1013,6 +1018,7 @@ impl Command {
|
||||
Self::App(app) => match app {
|
||||
AppCommand::Quit => "quit",
|
||||
AppCommand::Help { .. } => "help",
|
||||
AppCommand::Hint => "hint",
|
||||
AppCommand::Rebuild => "rebuild",
|
||||
AppCommand::Save => "save",
|
||||
AppCommand::SaveAs => "save as",
|
||||
|
||||
@@ -177,6 +177,9 @@ const fn build_rebuild(_path: &MatchedPath, _source: &str) -> Result<Command, Va
|
||||
const fn build_undo(_path: &MatchedPath, _source: &str) -> Result<Command, ValidationError> {
|
||||
Ok(Command::App(AppCommand::Undo))
|
||||
}
|
||||
const fn build_hint(_path: &MatchedPath, _source: &str) -> Result<Command, ValidationError> {
|
||||
Ok(Command::App(AppCommand::Hint))
|
||||
}
|
||||
|
||||
const fn build_redo(_path: &MatchedPath, _source: &str) -> Result<Command, ValidationError> {
|
||||
Ok(Command::App(AppCommand::Redo))
|
||||
@@ -263,6 +266,7 @@ pub static QUIT: CommandNode = CommandNode {
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_quit,
|
||||
help_id: Some("app.quit"),
|
||||
hint_ids: &["quit"],
|
||||
usage_ids: &["parse.usage.quit"],};
|
||||
|
||||
pub static HELP: CommandNode = CommandNode {
|
||||
@@ -270,13 +274,24 @@ pub static HELP: CommandNode = CommandNode {
|
||||
shape: HELP_TOPIC_OPT,
|
||||
ast_builder: build_help,
|
||||
help_id: Some("app.help"),
|
||||
hint_ids: &["help"],
|
||||
usage_ids: &["parse.usage.help"],};
|
||||
|
||||
pub static HINT: CommandNode = CommandNode {
|
||||
entry: Word::keyword("hint"),
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_hint,
|
||||
help_id: Some("app.hint"),
|
||||
// hint_id assigned in Phase C with the tier-3 corpus (ADR-0053).
|
||||
hint_ids: &["hint"],
|
||||
usage_ids: &["parse.usage.hint"],};
|
||||
|
||||
pub static REBUILD: CommandNode = CommandNode {
|
||||
entry: Word::keyword("rebuild"),
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_rebuild,
|
||||
help_id: Some("app.rebuild"),
|
||||
hint_ids: &["rebuild"],
|
||||
usage_ids: &["parse.usage.rebuild"],};
|
||||
|
||||
pub static SAVE: CommandNode = CommandNode {
|
||||
@@ -284,6 +299,7 @@ pub static SAVE: CommandNode = CommandNode {
|
||||
shape: SAVE_AS_OPT,
|
||||
ast_builder: build_save,
|
||||
help_id: Some("app.save"),
|
||||
hint_ids: &["save"],
|
||||
usage_ids: &["parse.usage.save"],};
|
||||
|
||||
pub static NEW: CommandNode = CommandNode {
|
||||
@@ -291,6 +307,7 @@ pub static NEW: CommandNode = CommandNode {
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_new,
|
||||
help_id: Some("app.new"),
|
||||
hint_ids: &["new"],
|
||||
usage_ids: &["parse.usage.new"],};
|
||||
|
||||
pub static LOAD: CommandNode = CommandNode {
|
||||
@@ -298,6 +315,7 @@ pub static LOAD: CommandNode = CommandNode {
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_load,
|
||||
help_id: Some("app.load"),
|
||||
hint_ids: &["load"],
|
||||
usage_ids: &["parse.usage.load"],};
|
||||
|
||||
pub static EXPORT: CommandNode = CommandNode {
|
||||
@@ -305,6 +323,7 @@ pub static EXPORT: CommandNode = CommandNode {
|
||||
shape: EXPORT_PATH_OPT,
|
||||
ast_builder: build_export,
|
||||
help_id: Some("app.export"),
|
||||
hint_ids: &["export"],
|
||||
usage_ids: &["parse.usage.export"],};
|
||||
|
||||
pub static IMPORT: CommandNode = CommandNode {
|
||||
@@ -312,6 +331,7 @@ pub static IMPORT: CommandNode = CommandNode {
|
||||
shape: IMPORT_BODY_OPT,
|
||||
ast_builder: build_import,
|
||||
help_id: Some("app.import"),
|
||||
hint_ids: &["import"],
|
||||
usage_ids: &["parse.usage.import"],};
|
||||
|
||||
pub static MODE: CommandNode = CommandNode {
|
||||
@@ -319,6 +339,7 @@ pub static MODE: CommandNode = CommandNode {
|
||||
shape: MODE_VALUE,
|
||||
ast_builder: build_mode,
|
||||
help_id: Some("app.mode"),
|
||||
hint_ids: &["mode"],
|
||||
usage_ids: &["parse.usage.mode"],};
|
||||
|
||||
pub static MESSAGES: CommandNode = CommandNode {
|
||||
@@ -326,6 +347,7 @@ pub static MESSAGES: CommandNode = CommandNode {
|
||||
shape: MESSAGES_VALUE_OPT,
|
||||
ast_builder: build_messages,
|
||||
help_id: Some("app.messages"),
|
||||
hint_ids: &["messages"],
|
||||
usage_ids: &["parse.usage.messages"],};
|
||||
|
||||
pub static UNDO: CommandNode = CommandNode {
|
||||
@@ -333,6 +355,7 @@ pub static UNDO: CommandNode = CommandNode {
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_undo,
|
||||
help_id: Some("app.undo"),
|
||||
hint_ids: &["undo"],
|
||||
usage_ids: &["parse.usage.undo"],};
|
||||
|
||||
pub static REDO: CommandNode = CommandNode {
|
||||
@@ -340,6 +363,7 @@ pub static REDO: CommandNode = CommandNode {
|
||||
shape: EMPTY_SEQ,
|
||||
ast_builder: build_redo,
|
||||
help_id: Some("app.redo"),
|
||||
hint_ids: &["redo"],
|
||||
usage_ids: &["parse.usage.redo"],};
|
||||
|
||||
pub static COPY: CommandNode = CommandNode {
|
||||
@@ -347,4 +371,5 @@ pub static COPY: CommandNode = CommandNode {
|
||||
shape: COPY_VALUE_OPT,
|
||||
ast_builder: build_copy,
|
||||
help_id: Some("app.copy"),
|
||||
hint_ids: &["copy"],
|
||||
usage_ids: &["parse.usage.copy"],};
|
||||
|
||||
@@ -1790,6 +1790,13 @@ pub static SHOW: CommandNode = CommandNode {
|
||||
shape: SHOW_SHAPE,
|
||||
ast_builder: build_show,
|
||||
help_id: Some("data.show"),
|
||||
hint_ids: &[
|
||||
"show_data",
|
||||
"show_table",
|
||||
"show_tables",
|
||||
"show_relationships",
|
||||
"show_indexes",
|
||||
],
|
||||
usage_ids: &[
|
||||
"parse.usage.show_data",
|
||||
"parse.usage.show_table",
|
||||
@@ -1805,6 +1812,7 @@ pub static SEED: CommandNode = CommandNode {
|
||||
shape: SEED_SHAPE,
|
||||
ast_builder: build_seed,
|
||||
help_id: Some("data.seed"),
|
||||
hint_ids: &["seed"],
|
||||
usage_ids: &["parse.usage.seed"],
|
||||
};
|
||||
|
||||
@@ -1813,6 +1821,8 @@ pub static INSERT: CommandNode = CommandNode {
|
||||
shape: INSERT_SHAPE,
|
||||
ast_builder: build_insert,
|
||||
help_id: Some("data.insert"),
|
||||
// ADR-0053 Phase-B exemplar.
|
||||
hint_ids: &["insert"],
|
||||
usage_ids: &["parse.usage.insert"],};
|
||||
|
||||
pub static UPDATE: CommandNode = CommandNode {
|
||||
@@ -1820,6 +1830,7 @@ pub static UPDATE: CommandNode = CommandNode {
|
||||
shape: UPDATE_SHAPE,
|
||||
ast_builder: build_update,
|
||||
help_id: Some("data.update"),
|
||||
hint_ids: &["update"],
|
||||
usage_ids: &["parse.usage.update"],};
|
||||
|
||||
pub static DELETE: CommandNode = CommandNode {
|
||||
@@ -1827,6 +1838,7 @@ pub static DELETE: CommandNode = CommandNode {
|
||||
shape: DELETE_SHAPE,
|
||||
ast_builder: build_delete,
|
||||
help_id: Some("data.delete"),
|
||||
hint_ids: &["delete"],
|
||||
usage_ids: &["parse.usage.delete"],};
|
||||
|
||||
pub static REPLAY: CommandNode = CommandNode {
|
||||
@@ -1834,6 +1846,7 @@ pub static REPLAY: CommandNode = CommandNode {
|
||||
shape: REPLAY_PATH,
|
||||
ast_builder: build_replay,
|
||||
help_id: Some("data.replay"),
|
||||
hint_ids: &["replay"],
|
||||
usage_ids: &["parse.usage.replay"],};
|
||||
|
||||
pub static EXPLAIN: CommandNode = CommandNode {
|
||||
@@ -1841,6 +1854,7 @@ pub static EXPLAIN: CommandNode = CommandNode {
|
||||
shape: EXPLAIN_SHAPE,
|
||||
ast_builder: build_explain,
|
||||
help_id: Some("data.explain"),
|
||||
hint_ids: &["explain"],
|
||||
usage_ids: &["parse.usage.explain"],};
|
||||
|
||||
/// `explain` over advanced-mode SQL (ADR-0039).
|
||||
@@ -1860,6 +1874,7 @@ pub static EXPLAIN_SQL: CommandNode = CommandNode {
|
||||
// too). Mirrors the `SQL_INSERT`/`SQL_UPDATE`/`SQL_DELETE`
|
||||
// precedent; otherwise `note_help` would print `explain` twice.
|
||||
help_id: None,
|
||||
hint_ids: &["explain_sql"],
|
||||
usage_ids: &[],};
|
||||
|
||||
/// SQL `SELECT` (ADR-0030 §6, ADR-0031, ADR-0032).
|
||||
@@ -1875,6 +1890,7 @@ pub static SELECT: CommandNode = CommandNode {
|
||||
shape: Node::Subgrammar(&sql_select::SQL_SELECT_TAIL),
|
||||
ast_builder: build_select,
|
||||
help_id: None,
|
||||
hint_ids: &["select"],
|
||||
usage_ids: &["parse.usage.select"],};
|
||||
|
||||
/// `WITH …` top-level statement (ADR-0032 §4 / sub-phase 2c).
|
||||
@@ -1889,6 +1905,7 @@ pub static WITH: CommandNode = CommandNode {
|
||||
shape: Node::Subgrammar(&sql_select::SQL_WITH_TAIL),
|
||||
ast_builder: build_select,
|
||||
help_id: None,
|
||||
hint_ids: &["with"],
|
||||
usage_ids: &["parse.usage.with"],};
|
||||
|
||||
/// SQL `INSERT` — the `Advanced`-category node of the shared
|
||||
@@ -1906,6 +1923,7 @@ pub static SQL_INSERT: CommandNode = CommandNode {
|
||||
shape: Node::Subgrammar(&sql_insert::SQL_INSERT_SHAPE),
|
||||
ast_builder: build_sql_insert,
|
||||
help_id: None,
|
||||
hint_ids: &["sql_insert"],
|
||||
usage_ids: &[],
|
||||
};
|
||||
|
||||
@@ -1919,6 +1937,7 @@ pub static SQL_UPDATE: CommandNode = CommandNode {
|
||||
shape: Node::Subgrammar(&sql_update::SQL_UPDATE_SHAPE),
|
||||
ast_builder: build_sql_update,
|
||||
help_id: None,
|
||||
hint_ids: &["sql_update"],
|
||||
usage_ids: &[],
|
||||
};
|
||||
|
||||
@@ -1934,6 +1953,7 @@ pub static SQL_DELETE: CommandNode = CommandNode {
|
||||
shape: Node::Subgrammar(&sql_delete::SQL_DELETE_SHAPE),
|
||||
ast_builder: build_sql_delete,
|
||||
help_id: None,
|
||||
hint_ids: &["sql_delete"],
|
||||
usage_ids: &[],
|
||||
};
|
||||
|
||||
|
||||
@@ -968,6 +968,13 @@ pub static DROP: CommandNode = CommandNode {
|
||||
shape: DROP_SHAPE,
|
||||
ast_builder: build_drop,
|
||||
help_id: Some("ddl.drop"),
|
||||
hint_ids: &[
|
||||
"drop_table",
|
||||
"drop_column",
|
||||
"drop_relationship",
|
||||
"drop_index",
|
||||
"drop_constraint",
|
||||
],
|
||||
usage_ids: &[
|
||||
"parse.usage.drop_table",
|
||||
"parse.usage.drop_column",
|
||||
@@ -981,6 +988,16 @@ pub static ADD: CommandNode = CommandNode {
|
||||
shape: ADD_SHAPE,
|
||||
ast_builder: build_add,
|
||||
help_id: Some("ddl.add"),
|
||||
// Per-form (ADR-0053 D3): every form is listed so the form-word
|
||||
// disambiguation resolves correctly; forms without an authored
|
||||
// block yet fall back to tier-2 at render. `add_relationship` is
|
||||
// authored as a Phase-B exemplar.
|
||||
hint_ids: &[
|
||||
"add_column",
|
||||
"add_relationship",
|
||||
"add_index",
|
||||
"add_constraint",
|
||||
],
|
||||
usage_ids: &[
|
||||
"parse.usage.add_column",
|
||||
"parse.usage.add_relationship",
|
||||
@@ -993,6 +1010,7 @@ pub static RENAME: CommandNode = CommandNode {
|
||||
shape: RENAME_COLUMN,
|
||||
ast_builder: build_rename_column,
|
||||
help_id: Some("ddl.rename"),
|
||||
hint_ids: &["rename_column"],
|
||||
usage_ids: &["parse.usage.rename_column"],};
|
||||
|
||||
pub static CHANGE: CommandNode = CommandNode {
|
||||
@@ -1000,6 +1018,7 @@ pub static CHANGE: CommandNode = CommandNode {
|
||||
shape: CHANGE_COLUMN,
|
||||
ast_builder: build_change_column,
|
||||
help_id: Some("ddl.change"),
|
||||
hint_ids: &["change_column"],
|
||||
usage_ids: &["parse.usage.change_column"],};
|
||||
|
||||
// =================================================================
|
||||
@@ -1360,6 +1379,7 @@ pub static CREATE: CommandNode = CommandNode {
|
||||
shape: CREATE_TABLE,
|
||||
ast_builder: build_create_table,
|
||||
help_id: Some("ddl.create"),
|
||||
hint_ids: &["create_table"],
|
||||
usage_ids: &["parse.usage.create_table"],};
|
||||
|
||||
// =================================================================
|
||||
@@ -1428,6 +1448,7 @@ pub static CREATE_M2N: CommandNode = CommandNode {
|
||||
shape: CREATE_M2N_SHAPE,
|
||||
ast_builder: build_create_m2n,
|
||||
help_id: Some("ddl.create_m2n"),
|
||||
hint_ids: &["create_m2n"],
|
||||
usage_ids: &["parse.usage.create_m2n"],
|
||||
};
|
||||
|
||||
@@ -1858,6 +1879,7 @@ pub static SQL_CREATE_TABLE: CommandNode = CommandNode {
|
||||
shape: Node::Subgrammar(&super::sql_create_table::SQL_CREATE_TABLE_SHAPE),
|
||||
ast_builder: build_sql_create_table,
|
||||
help_id: Some("ddl.sql_create_table"),
|
||||
hint_ids: &["sql_create_table"],
|
||||
usage_ids: &["parse.usage.sql_create_table"],
|
||||
};
|
||||
|
||||
@@ -1877,6 +1899,7 @@ pub static SQL_DROP_TABLE: CommandNode = CommandNode {
|
||||
shape: SQL_DROP_TABLE_SHAPE,
|
||||
ast_builder: build_sql_drop_table,
|
||||
help_id: Some("ddl.sql_drop_table"),
|
||||
hint_ids: &["sql_drop_table"],
|
||||
usage_ids: &["parse.usage.sql_drop_table"],
|
||||
};
|
||||
|
||||
@@ -1896,6 +1919,7 @@ pub static SQL_DROP_INDEX: CommandNode = CommandNode {
|
||||
shape: SQL_DROP_INDEX_SHAPE,
|
||||
ast_builder: build_sql_drop_index,
|
||||
help_id: Some("ddl.sql_drop_index"),
|
||||
hint_ids: &["sql_drop_index"],
|
||||
usage_ids: &["parse.usage.sql_drop_index"],
|
||||
};
|
||||
|
||||
@@ -1977,6 +2001,7 @@ pub static SQL_CREATE_INDEX: CommandNode = CommandNode {
|
||||
shape: SQL_CREATE_INDEX_SHAPE,
|
||||
ast_builder: build_sql_create_index,
|
||||
help_id: Some("ddl.sql_create_index"),
|
||||
hint_ids: &["sql_create_index"],
|
||||
usage_ids: &["parse.usage.sql_create_index"],
|
||||
};
|
||||
|
||||
@@ -2535,6 +2560,7 @@ pub static SQL_ALTER_TABLE: CommandNode = CommandNode {
|
||||
shape: SQL_ALTER_TABLE_SHAPE,
|
||||
ast_builder: build_sql_alter_table,
|
||||
help_id: Some("ddl.sql_alter_table"),
|
||||
hint_ids: &["sql_alter_table"],
|
||||
usage_ids: &["parse.usage.sql_alter_table"],
|
||||
};
|
||||
|
||||
|
||||
+286
-39
@@ -530,6 +530,18 @@ pub struct CommandNode {
|
||||
/// so a newly-registered command appears in `help`
|
||||
/// automatically (ADR-0024 §help_id).
|
||||
pub help_id: Option<&'static str>,
|
||||
/// Catalog key stems (`hint.cmd.<id>`) for this command's
|
||||
/// **tier-3** contextual hints (ADR-0053 / H2), **one per form**,
|
||||
/// mirroring `usage_ids`. A single-form command carries one; a
|
||||
/// multi-form command (`add`, `drop`, `show`, `create`) carries
|
||||
/// one per form so a live-input hint can be specific to the form
|
||||
/// being typed (`hint.cmd.add_relationship`, not a shared `add`
|
||||
/// block). `hint_key_for_input_in_mode` disambiguates by the form
|
||||
/// word, reusing `usage_key_for_input_in_mode`'s logic. Empty
|
||||
/// until a form's tier-3 block is authored (the surface falls back
|
||||
/// to tier-2 ambient/error text). Distinct from `help_id` (which is
|
||||
/// `None` on advanced-SQL forms purely to dedup the `help` list).
|
||||
pub hint_ids: &'static [&'static str],
|
||||
/// Catalog keys under `parse.usage.*` to render in the
|
||||
/// "usage:" block when a parse error fires for this command
|
||||
/// (ADR-0021 §1, ADR-0024 §architecture). Multi-form families
|
||||
@@ -574,32 +586,100 @@ pub fn usage_keys_for_input_in_mode(
|
||||
source: &str,
|
||||
mode: crate::mode::Mode,
|
||||
) -> Option<(&'static str, Vec<&'static str>)> {
|
||||
let pick = selected_nodes_for_input_in_mode(source, mode);
|
||||
if pick.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let mut keys: Vec<&'static str> = Vec::new();
|
||||
for (_, node, _) in &pick {
|
||||
for k in node.usage_ids {
|
||||
if !keys.contains(k) {
|
||||
keys.push(*k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if keys.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let entry = pick[0].1.entry.primary;
|
||||
Some((entry, keys))
|
||||
}
|
||||
|
||||
/// The single tier-3 hint key (`hint.cmd.<id>` stem) for the command
|
||||
/// **form** `source` is currently typing, in `mode` (H2 / ADR-0053).
|
||||
///
|
||||
/// Mirrors [`usage_key_for_input_in_mode`]: the union of the
|
||||
/// mode-selected nodes' `hint_ids`, disambiguated to the typed form by
|
||||
/// [`pick_form_key`] — so `add 1:n relationship` resolves to the
|
||||
/// relationship hint, and an advanced-SQL form resolves to its own
|
||||
/// (not its simple sibling's). `None` if no entry word matches or the
|
||||
/// form has no tier-3 block yet (the caller falls back to tier-2).
|
||||
#[must_use]
|
||||
pub fn hint_key_for_input_in_mode(source: &str, mode: crate::mode::Mode) -> Option<&'static str> {
|
||||
use crate::dsl::walker::lex_helpers::{consume_ident, skip_whitespace};
|
||||
let nodes = selected_nodes_for_input_in_mode(source, mode);
|
||||
if nodes.is_empty() {
|
||||
return None;
|
||||
}
|
||||
// Mode-ordered union (advanced-primary first in advanced mode), so a
|
||||
// shared entry word resolves to the surface the user is in.
|
||||
let mut keys: Vec<&'static str> = Vec::new();
|
||||
for (_, node, _) in &nodes {
|
||||
for k in node.hint_ids {
|
||||
if !keys.contains(k) {
|
||||
keys.push(*k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if keys.is_empty() {
|
||||
return None;
|
||||
}
|
||||
if keys.len() == 1 {
|
||||
return Some(keys[0]);
|
||||
}
|
||||
// A bare multi-form entry word (no form word yet — `add`⏎) has no
|
||||
// chosen form: defer to tier-2, which lists the choices.
|
||||
let start = skip_whitespace(source, 0);
|
||||
if let Some((_, entry_end)) = consume_ident(source, start)
|
||||
&& skip_whitespace(source, entry_end) >= source.len()
|
||||
{
|
||||
return None;
|
||||
}
|
||||
// A form word picks the form (`drop column` → `drop_column`); when
|
||||
// the second token isn't a form word (`insert into …`, `update …
|
||||
// set`), fall back to the mode-primary key — in advanced mode the
|
||||
// SQL form, in simple mode the DSL form.
|
||||
pick_form_key(source, &keys).or_else(|| keys.first().copied())
|
||||
}
|
||||
|
||||
/// Shared mode-aware command-form selection for the entry word at the
|
||||
/// start of `source`.
|
||||
///
|
||||
/// Extracted so the usage-key and hint-id lookups agree on which form
|
||||
/// the user is typing.
|
||||
///
|
||||
/// Advanced mode: every candidate form is reachable — the SQL nodes
|
||||
/// are primary, and the DSL nodes remain valid via fallback (verified:
|
||||
/// `create table … with pk` and `drop column …` both run in advanced
|
||||
/// mode). Mode-primary (Advanced) first, so a hint never hides input
|
||||
/// that works. Simple mode: only the DSL forms — the SQL-only forms
|
||||
/// hit the "this is SQL" rail and are not reachable. (ADR-0042 G3.)
|
||||
/// Degenerate guard: an advanced-only word in simple mode leaves the
|
||||
/// selection empty; fall back to all candidates.
|
||||
fn selected_nodes_for_input_in_mode(
|
||||
source: &str,
|
||||
mode: crate::mode::Mode,
|
||||
) -> Vec<(usize, &'static CommandNode, CommandCategory)> {
|
||||
use crate::dsl::walker::lex_helpers::{consume_ident, skip_whitespace};
|
||||
let start = skip_whitespace(source, 0);
|
||||
let (kw_start, kw_end) = consume_ident(source, start)?;
|
||||
let Some((kw_start, kw_end)) = consume_ident(source, start) else {
|
||||
return Vec::new();
|
||||
};
|
||||
let word = &source[kw_start..kw_end];
|
||||
let candidates = commands_for_entry_word(word);
|
||||
if candidates.is_empty() {
|
||||
return None;
|
||||
return Vec::new();
|
||||
}
|
||||
let union = |nodes: &[(usize, &'static CommandNode, CommandCategory)]| -> Vec<&'static str> {
|
||||
let mut keys: Vec<&'static str> = Vec::new();
|
||||
for (_, node, _) in nodes {
|
||||
for k in node.usage_ids {
|
||||
if !keys.contains(k) {
|
||||
keys.push(*k);
|
||||
}
|
||||
}
|
||||
}
|
||||
keys
|
||||
};
|
||||
// Advanced mode: every candidate form is reachable — the SQL
|
||||
// nodes are primary, and the DSL nodes remain valid via fallback
|
||||
// (verified: `create table … with pk` and `drop column …` both
|
||||
// run in advanced mode). Show them all, mode-primary (Advanced)
|
||||
// first, so the usage hint never hides input that works. Simple
|
||||
// mode: only the DSL forms — the SQL-only forms hit the "this is
|
||||
// SQL" rail and are not reachable. (ADR-0042 G3.)
|
||||
let selected: Vec<(usize, &'static CommandNode, CommandCategory)> =
|
||||
if mode == crate::mode::Mode::Advanced {
|
||||
let mut v: Vec<_> = candidates
|
||||
@@ -621,17 +701,7 @@ pub fn usage_keys_for_input_in_mode(
|
||||
.filter(|(_, _, c)| *c == CommandCategory::Simple)
|
||||
.collect()
|
||||
};
|
||||
// Degenerate guard: an advanced-only word in simple mode (not
|
||||
// normally reachable — it hits the SQL rail first) leaves
|
||||
// `selected` empty; fall back to all candidates so a usage block
|
||||
// still renders rather than the available-commands fallback.
|
||||
let pick = if selected.is_empty() { candidates } else { selected };
|
||||
let keys = union(&pick);
|
||||
if keys.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let entry = pick[0].1.entry.primary;
|
||||
Some((entry, keys))
|
||||
if selected.is_empty() { candidates } else { selected }
|
||||
}
|
||||
|
||||
/// The single usage template most relevant to `source`, when
|
||||
@@ -658,14 +728,24 @@ pub fn usage_key_for_input_in_mode(
|
||||
source: &str,
|
||||
mode: crate::mode::Mode,
|
||||
) -> Option<&'static str> {
|
||||
use crate::dsl::walker::lex_helpers::{consume_ident, skip_whitespace};
|
||||
let (_entry, keys) = usage_keys_for_input_in_mode(source, mode)?;
|
||||
pick_form_key(source, &keys)
|
||||
}
|
||||
|
||||
/// From the form word after the entry keyword, pick the single `keys`
|
||||
/// entry for the form `source` names.
|
||||
///
|
||||
/// A single-entry list resolves to its one key; a multi-form list
|
||||
/// disambiguates by the form word (`add 1:n relationship` → the
|
||||
/// `…relationship` key, `create m:n …` → the `…m2n` key, else the
|
||||
/// identifier form word matched against each key's suffix). Shared by
|
||||
/// the usage-template and tier-3-hint single-key lookups so they agree.
|
||||
fn pick_form_key<'a>(source: &str, keys: &[&'a str]) -> Option<&'a str> {
|
||||
use crate::dsl::walker::lex_helpers::{consume_ident, skip_whitespace};
|
||||
let first = *keys.first()?;
|
||||
if keys.len() == 1 {
|
||||
return Some(first);
|
||||
}
|
||||
// Multi-form: the form is named by the token right after
|
||||
// the entry keyword.
|
||||
let start = skip_whitespace(source, 0);
|
||||
let (_, entry_end) = consume_ident(source, start)?;
|
||||
let after = skip_whitespace(source, entry_end);
|
||||
@@ -674,14 +754,12 @@ pub fn usage_key_for_input_in_mode(
|
||||
return keys.iter().copied().find(|k| k.ends_with("relationship"));
|
||||
}
|
||||
// The `create m:n relationship` form (ADR-0045) opens with `m:n`
|
||||
// — a letter, so the digit branch misses it, and its usage key ends
|
||||
// `…create_m2n` (not `relationship`).
|
||||
// — a letter, so the digit branch misses it; its key ends `…m2n`.
|
||||
if source[after..].get(..3).is_some_and(|s| s.eq_ignore_ascii_case("m:n")) {
|
||||
return keys.iter().copied().find(|k| k.ends_with("m2n"));
|
||||
}
|
||||
// Otherwise the form word is an identifier — `column`,
|
||||
// `index`, `table`, `relationship` — matched against the
|
||||
// usage key's suffix.
|
||||
// Otherwise the form word is an identifier — `column`, `index`,
|
||||
// `table`, `relationship` — matched against each key's suffix.
|
||||
let (s, e) = consume_ident(source, after)?;
|
||||
let form = source[s..e].to_ascii_lowercase();
|
||||
keys.iter().copied().find(|k| k.ends_with(form.as_str()))
|
||||
@@ -712,6 +790,7 @@ pub fn entry_words_alphabetised() -> Vec<&'static str> {
|
||||
pub static REGISTRY: &[(&CommandNode, CommandCategory)] = &[
|
||||
(&app::QUIT, CommandCategory::Simple),
|
||||
(&app::HELP, CommandCategory::Simple),
|
||||
(&app::HINT, CommandCategory::Simple),
|
||||
(&app::REBUILD, CommandCategory::Simple),
|
||||
(&app::SAVE, CommandCategory::Simple),
|
||||
(&app::NEW, CommandCategory::Simple),
|
||||
@@ -836,6 +915,174 @@ pub fn commands_for_entry_word(
|
||||
.collect()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod hint_key_tests {
|
||||
use super::hint_key_for_input_in_mode;
|
||||
use crate::mode::Mode;
|
||||
|
||||
/// Per-form hint keying (ADR-0053 D3): a multi-form command
|
||||
/// resolves the *typed* form, not the node — `add 1:n
|
||||
/// relationship` → the relationship hint, `add column` → the
|
||||
/// (as-yet-unauthored) column hint, never the wrong form.
|
||||
#[test]
|
||||
fn hint_key_resolves_the_typed_form() {
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("add 1:n relationship from A.x to B.y", Mode::Simple),
|
||||
Some("add_relationship")
|
||||
);
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("add column Note text to T", Mode::Simple),
|
||||
Some("add_column")
|
||||
);
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("insert into T values (1)", Mode::Simple),
|
||||
Some("insert")
|
||||
);
|
||||
// Multi-form DROP disambiguates to the typed form too.
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("drop table T", Mode::Simple),
|
||||
Some("drop_table")
|
||||
);
|
||||
// Mode picks the surface for a shared entry word whose second
|
||||
// token isn't a form word: SQL form in advanced, DSL in simple.
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("insert into T values (1)", Mode::Advanced),
|
||||
Some("sql_insert")
|
||||
);
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("insert into T values (1)", Mode::Simple),
|
||||
Some("insert")
|
||||
);
|
||||
// `create table` shares a form word — advanced-first ordering
|
||||
// resolves it to the SQL form in advanced mode.
|
||||
assert_eq!(
|
||||
hint_key_for_input_in_mode("create table T (id int)", Mode::Advanced),
|
||||
Some("sql_create_table")
|
||||
);
|
||||
// Unknown entry word → None (tier-2 fallback).
|
||||
assert_eq!(hint_key_for_input_in_mode("zzz", Mode::Simple), None);
|
||||
}
|
||||
|
||||
/// Comprehensiveness gate (ADR-0053 D6): every command form in the
|
||||
/// REGISTRY carries at least one `hint_id`, and each resolves to a
|
||||
/// tier-3 `hint.cmd.<id>` block. `keys.rs` checks referenced keys
|
||||
/// resolve; this checks every command *has* one.
|
||||
#[test]
|
||||
fn every_command_form_has_a_tier3_block() {
|
||||
let cat = crate::friendly::catalog();
|
||||
for (node, _category) in super::REGISTRY {
|
||||
assert!(
|
||||
!node.hint_ids.is_empty(),
|
||||
"command `{}` has no hint_ids (ADR-0053 D6)",
|
||||
node.entry.primary
|
||||
);
|
||||
for id in node.hint_ids {
|
||||
let key = format!("hint.cmd.{id}.what");
|
||||
assert!(
|
||||
cat.get(&key).is_some(),
|
||||
"missing tier-3 block `{key}` for command `{}`",
|
||||
node.entry.primary
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Comprehensiveness gate (ADR-0053 D6): every runtime error class
|
||||
/// `friendly::error_hint_class` can return resolves to a tier-3
|
||||
/// `hint.err.<class>` block. Keep this list in sync with
|
||||
/// `error_hint_class` (its own unit tests pin the outputs).
|
||||
/// Diagnostic classes are deferred (issue #38), so not checked here.
|
||||
#[test]
|
||||
fn every_runtime_error_class_has_a_tier3_block() {
|
||||
let cat = crate::friendly::catalog();
|
||||
let classes = [
|
||||
"unique",
|
||||
"foreign_key.child_side",
|
||||
"foreign_key.parent_side",
|
||||
"not_null",
|
||||
"check",
|
||||
"type_mismatch",
|
||||
"not_found",
|
||||
"already_exists",
|
||||
"generic",
|
||||
"invalid_value",
|
||||
];
|
||||
for c in classes {
|
||||
let key = format!("hint.err.{c}.what");
|
||||
assert!(cat.get(&key).is_some(), "missing tier-3 error block `{key}`");
|
||||
}
|
||||
}
|
||||
|
||||
/// Semantic-verification guard (handoff-71): every `hint.cmd.<form>`
|
||||
/// **example** must parse in the mode the form is taught for. This
|
||||
/// backstops the bug class found in the H2 corpus pass — an example
|
||||
/// that drifts out of the real grammar (a typo, a removed clause, or
|
||||
/// an argument the command never accepted, e.g. an inline name on
|
||||
/// `save as` which opens a modal instead). It cannot police the
|
||||
/// *semantics* of an example that happens to parse (that is the
|
||||
/// manual pass), but it locks the syntactic floor so future edits
|
||||
/// can't ship an unparseable teaching line.
|
||||
///
|
||||
/// The mode per form mirrors `hint_key_for_input_in_mode`: the
|
||||
/// advanced-SQL forms are taught in advanced mode; everything else
|
||||
/// (DSL + app commands) in simple mode.
|
||||
#[test]
|
||||
fn every_cmd_hint_example_parses_in_its_mode() {
|
||||
use crate::dsl::parser::parse_command_in_mode;
|
||||
use crate::mode::Mode;
|
||||
|
||||
// Advanced-mode forms — the SQL surface (ADR-0030–0039). Every
|
||||
// other form (DSL + app commands) is taught in simple mode. This
|
||||
// mirrors the mode split `hint_key_for_input_in_mode` resolves.
|
||||
const ADVANCED: &[&str] = &[
|
||||
"sql_create_table",
|
||||
"sql_alter_table",
|
||||
"sql_create_index",
|
||||
"sql_drop_index",
|
||||
"sql_drop_table",
|
||||
"sql_insert",
|
||||
"sql_update",
|
||||
"sql_delete",
|
||||
"select",
|
||||
"with",
|
||||
"explain_sql",
|
||||
];
|
||||
|
||||
// Iterate the *catalog* (the corpus is the source of truth), not the
|
||||
// REGISTRY: this reaches every `hint.cmd.<id>` block including any
|
||||
// not owned by a command node, so an orphaned or mis-keyed example
|
||||
// can't slip past the guard.
|
||||
let cat = crate::friendly::catalog();
|
||||
let mut checked = 0usize;
|
||||
for key in cat.keys() {
|
||||
let Some(id) = key
|
||||
.strip_prefix("hint.cmd.")
|
||||
.and_then(|rest| rest.strip_suffix(".example"))
|
||||
else {
|
||||
continue;
|
||||
};
|
||||
let example = cat.get(key).expect("key came from the catalog");
|
||||
let mode = if ADVANCED.contains(&id) {
|
||||
Mode::Advanced
|
||||
} else {
|
||||
Mode::Simple
|
||||
};
|
||||
assert!(
|
||||
parse_command_in_mode(example, mode).is_ok(),
|
||||
"hint.cmd.{id}.example does not parse in {mode:?} mode: {example:?}",
|
||||
);
|
||||
checked += 1;
|
||||
}
|
||||
// Floor guard: the corpus had 49 command forms at the time of
|
||||
// writing (ADR-0053). If this drops, a block (and its example
|
||||
// coverage) silently vanished.
|
||||
assert!(
|
||||
checked >= 49,
|
||||
"expected at least 49 hint.cmd.* examples, checked {checked}",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod usage_key_tests {
|
||||
use super::usage_key_for_input;
|
||||
|
||||
@@ -6910,6 +6910,7 @@ mod dispatch_3a_tests {
|
||||
shape: Node::Word(Word::keyword("dsltail")),
|
||||
ast_builder: dsl_builder,
|
||||
help_id: None,
|
||||
hint_ids: &[],
|
||||
usage_ids: &[],
|
||||
};
|
||||
static SMOKE_SQL: CommandNode = CommandNode {
|
||||
@@ -6917,6 +6918,7 @@ mod dispatch_3a_tests {
|
||||
shape: Node::Word(Word::keyword("sqltail")),
|
||||
ast_builder: sql_builder,
|
||||
help_id: None,
|
||||
hint_ids: &[],
|
||||
usage_ids: &[],
|
||||
};
|
||||
|
||||
|
||||
@@ -180,6 +180,7 @@ pub const KEYS_AND_PLACEHOLDERS: &[(&str, &[&str])] = &[
|
||||
("help.unknown_topic", &["topic"]),
|
||||
("help.app.quit", &[]),
|
||||
("help.app.help", &[]),
|
||||
("help.app.hint", &[]),
|
||||
("help.app.rebuild", &[]),
|
||||
("help.app.save", &[]),
|
||||
("help.app.new", &[]),
|
||||
@@ -222,6 +223,184 @@ pub const KEYS_AND_PLACEHOLDERS: &[(&str, &[&str])] = &[
|
||||
&["message", "usage"],
|
||||
),
|
||||
("hint.ambient_expected", &["expected"]),
|
||||
("hint.getting_started", &[]),
|
||||
("hint.block.heading", &[]),
|
||||
("hint.block.what", &[]),
|
||||
("hint.block.example", &[]),
|
||||
("hint.block.concept", &[]),
|
||||
// Tier-3 teaching blocks (ADR-0053 D3) — Phase-B exemplars.
|
||||
("hint.cmd.insert.what", &[]),
|
||||
("hint.cmd.insert.example", &[]),
|
||||
("hint.cmd.insert.concept", &[]),
|
||||
("hint.cmd.add_relationship.what", &[]),
|
||||
("hint.cmd.add_relationship.example", &[]),
|
||||
("hint.cmd.add_relationship.concept", &[]),
|
||||
("hint.err.foreign_key.child_side.what", &[]),
|
||||
("hint.err.foreign_key.child_side.example", &[]),
|
||||
("hint.err.foreign_key.child_side.concept", &[]),
|
||||
// Phase C batch 5 — runtime error-class hints.
|
||||
("hint.err.foreign_key.parent_side.what", &[]),
|
||||
("hint.err.foreign_key.parent_side.example", &[]),
|
||||
("hint.err.foreign_key.parent_side.concept", &[]),
|
||||
("hint.err.unique.what", &[]),
|
||||
("hint.err.unique.example", &[]),
|
||||
("hint.err.unique.concept", &[]),
|
||||
("hint.err.not_null.what", &[]),
|
||||
("hint.err.not_null.example", &[]),
|
||||
("hint.err.not_null.concept", &[]),
|
||||
("hint.err.check.what", &[]),
|
||||
("hint.err.check.example", &[]),
|
||||
("hint.err.check.concept", &[]),
|
||||
("hint.err.type_mismatch.what", &[]),
|
||||
("hint.err.type_mismatch.example", &[]),
|
||||
("hint.err.type_mismatch.concept", &[]),
|
||||
("hint.err.not_found.what", &[]),
|
||||
("hint.err.not_found.example", &[]),
|
||||
("hint.err.not_found.concept", &[]),
|
||||
("hint.err.already_exists.what", &[]),
|
||||
("hint.err.already_exists.example", &[]),
|
||||
("hint.err.already_exists.concept", &[]),
|
||||
("hint.err.generic.what", &[]),
|
||||
("hint.err.generic.example", &[]),
|
||||
("hint.err.invalid_value.what", &[]),
|
||||
("hint.err.invalid_value.example", &[]),
|
||||
// Phase C batch 1 — app-lifecycle command hints.
|
||||
("hint.cmd.quit.what", &[]),
|
||||
("hint.cmd.quit.example", &[]),
|
||||
("hint.cmd.help.what", &[]),
|
||||
("hint.cmd.help.example", &[]),
|
||||
("hint.cmd.help.concept", &[]),
|
||||
("hint.cmd.hint.what", &[]),
|
||||
("hint.cmd.hint.example", &[]),
|
||||
("hint.cmd.rebuild.what", &[]),
|
||||
("hint.cmd.rebuild.example", &[]),
|
||||
("hint.cmd.rebuild.concept", &[]),
|
||||
("hint.cmd.save.what", &[]),
|
||||
("hint.cmd.save.example", &[]),
|
||||
("hint.cmd.save.concept", &[]),
|
||||
("hint.cmd.new.what", &[]),
|
||||
("hint.cmd.new.example", &[]),
|
||||
("hint.cmd.load.what", &[]),
|
||||
("hint.cmd.load.example", &[]),
|
||||
("hint.cmd.export.what", &[]),
|
||||
("hint.cmd.export.example", &[]),
|
||||
("hint.cmd.export.concept", &[]),
|
||||
("hint.cmd.import.what", &[]),
|
||||
("hint.cmd.import.example", &[]),
|
||||
("hint.cmd.mode.what", &[]),
|
||||
("hint.cmd.mode.example", &[]),
|
||||
("hint.cmd.mode.concept", &[]),
|
||||
("hint.cmd.messages.what", &[]),
|
||||
("hint.cmd.messages.example", &[]),
|
||||
("hint.cmd.messages.concept", &[]),
|
||||
("hint.cmd.undo.what", &[]),
|
||||
("hint.cmd.undo.example", &[]),
|
||||
("hint.cmd.undo.concept", &[]),
|
||||
("hint.cmd.redo.what", &[]),
|
||||
("hint.cmd.redo.example", &[]),
|
||||
("hint.cmd.copy.what", &[]),
|
||||
("hint.cmd.copy.example", &[]),
|
||||
// Phase C batch 2 — DDL command hints.
|
||||
("hint.cmd.create_table.what", &[]),
|
||||
("hint.cmd.create_table.example", &[]),
|
||||
("hint.cmd.create_table.concept", &[]),
|
||||
("hint.cmd.create_m2n.what", &[]),
|
||||
("hint.cmd.create_m2n.example", &[]),
|
||||
("hint.cmd.create_m2n.concept", &[]),
|
||||
("hint.cmd.add_column.what", &[]),
|
||||
("hint.cmd.add_column.example", &[]),
|
||||
("hint.cmd.add_column.concept", &[]),
|
||||
("hint.cmd.add_index.what", &[]),
|
||||
("hint.cmd.add_index.example", &[]),
|
||||
("hint.cmd.add_index.concept", &[]),
|
||||
("hint.cmd.add_constraint.what", &[]),
|
||||
("hint.cmd.add_constraint.example", &[]),
|
||||
("hint.cmd.add_constraint.concept", &[]),
|
||||
("hint.cmd.drop_table.what", &[]),
|
||||
("hint.cmd.drop_table.example", &[]),
|
||||
("hint.cmd.drop_table.concept", &[]),
|
||||
("hint.cmd.drop_column.what", &[]),
|
||||
("hint.cmd.drop_column.example", &[]),
|
||||
("hint.cmd.drop_column.concept", &[]),
|
||||
("hint.cmd.drop_relationship.what", &[]),
|
||||
("hint.cmd.drop_relationship.example", &[]),
|
||||
("hint.cmd.drop_relationship.concept", &[]),
|
||||
("hint.cmd.drop_index.what", &[]),
|
||||
("hint.cmd.drop_index.example", &[]),
|
||||
("hint.cmd.drop_index.concept", &[]),
|
||||
("hint.cmd.drop_constraint.what", &[]),
|
||||
("hint.cmd.drop_constraint.example", &[]),
|
||||
("hint.cmd.drop_constraint.concept", &[]),
|
||||
("hint.cmd.rename_column.what", &[]),
|
||||
("hint.cmd.rename_column.example", &[]),
|
||||
("hint.cmd.rename_column.concept", &[]),
|
||||
("hint.cmd.change_column.what", &[]),
|
||||
("hint.cmd.change_column.example", &[]),
|
||||
("hint.cmd.change_column.concept", &[]),
|
||||
// Phase C batch 3 — DML command hints.
|
||||
("hint.cmd.update.what", &[]),
|
||||
("hint.cmd.update.example", &[]),
|
||||
("hint.cmd.update.concept", &[]),
|
||||
("hint.cmd.delete.what", &[]),
|
||||
("hint.cmd.delete.example", &[]),
|
||||
("hint.cmd.delete.concept", &[]),
|
||||
("hint.cmd.show_data.what", &[]),
|
||||
("hint.cmd.show_data.example", &[]),
|
||||
("hint.cmd.show_data.concept", &[]),
|
||||
("hint.cmd.show_table.what", &[]),
|
||||
("hint.cmd.show_table.example", &[]),
|
||||
("hint.cmd.show_table.concept", &[]),
|
||||
("hint.cmd.show_tables.what", &[]),
|
||||
("hint.cmd.show_tables.example", &[]),
|
||||
("hint.cmd.show_relationships.what", &[]),
|
||||
("hint.cmd.show_relationships.example", &[]),
|
||||
("hint.cmd.show_relationships.concept", &[]),
|
||||
("hint.cmd.show_indexes.what", &[]),
|
||||
("hint.cmd.show_indexes.example", &[]),
|
||||
("hint.cmd.show_indexes.concept", &[]),
|
||||
("hint.cmd.seed.what", &[]),
|
||||
("hint.cmd.seed.example", &[]),
|
||||
("hint.cmd.seed.concept", &[]),
|
||||
("hint.cmd.explain.what", &[]),
|
||||
("hint.cmd.explain.example", &[]),
|
||||
("hint.cmd.explain.concept", &[]),
|
||||
("hint.cmd.replay.what", &[]),
|
||||
("hint.cmd.replay.example", &[]),
|
||||
("hint.cmd.replay.concept", &[]),
|
||||
// Phase C batch 4 — advanced-mode SQL command hints.
|
||||
("hint.cmd.sql_create_table.what", &[]),
|
||||
("hint.cmd.sql_create_table.example", &[]),
|
||||
("hint.cmd.sql_create_table.concept", &[]),
|
||||
("hint.cmd.sql_alter_table.what", &[]),
|
||||
("hint.cmd.sql_alter_table.example", &[]),
|
||||
("hint.cmd.sql_alter_table.concept", &[]),
|
||||
("hint.cmd.sql_create_index.what", &[]),
|
||||
("hint.cmd.sql_create_index.example", &[]),
|
||||
("hint.cmd.sql_create_index.concept", &[]),
|
||||
("hint.cmd.sql_drop_index.what", &[]),
|
||||
("hint.cmd.sql_drop_index.example", &[]),
|
||||
("hint.cmd.sql_drop_index.concept", &[]),
|
||||
("hint.cmd.sql_drop_table.what", &[]),
|
||||
("hint.cmd.sql_drop_table.example", &[]),
|
||||
("hint.cmd.sql_drop_table.concept", &[]),
|
||||
("hint.cmd.sql_insert.what", &[]),
|
||||
("hint.cmd.sql_insert.example", &[]),
|
||||
("hint.cmd.sql_insert.concept", &[]),
|
||||
("hint.cmd.sql_update.what", &[]),
|
||||
("hint.cmd.sql_update.example", &[]),
|
||||
("hint.cmd.sql_update.concept", &[]),
|
||||
("hint.cmd.sql_delete.what", &[]),
|
||||
("hint.cmd.sql_delete.example", &[]),
|
||||
("hint.cmd.sql_delete.concept", &[]),
|
||||
("hint.cmd.select.what", &[]),
|
||||
("hint.cmd.select.example", &[]),
|
||||
("hint.cmd.select.concept", &[]),
|
||||
("hint.cmd.with.what", &[]),
|
||||
("hint.cmd.with.example", &[]),
|
||||
("hint.cmd.with.concept", &[]),
|
||||
("hint.cmd.explain_sql.what", &[]),
|
||||
("hint.cmd.explain_sql.example", &[]),
|
||||
("hint.cmd.explain_sql.concept", &[]),
|
||||
(
|
||||
"hint.ambient_invalid_ident",
|
||||
&["kind", "found"],
|
||||
@@ -299,6 +478,7 @@ pub const KEYS_AND_PLACEHOLDERS: &[(&str, &[&str])] = &[
|
||||
("parse.usage.rename_column", &[]),
|
||||
("parse.usage.export", &[]),
|
||||
("parse.usage.help", &[]),
|
||||
("parse.usage.hint", &[]),
|
||||
("parse.usage.import", &[]),
|
||||
("parse.usage.copy", &[]),
|
||||
("parse.usage.load", &[]),
|
||||
@@ -472,6 +652,7 @@ pub const KEYS_AND_PLACEHOLDERS: &[(&str, &[&str])] = &[
|
||||
("shortcut.confirm", &[]),
|
||||
("shortcut.cycle", &[]),
|
||||
("shortcut.del_word", &[]),
|
||||
("shortcut.hint", &[]),
|
||||
("shortcut.history", &[]),
|
||||
("shortcut.home_end", &[]),
|
||||
("shortcut.load", &[]),
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ pub mod translate;
|
||||
|
||||
pub use error::{DiagnosticTable, FriendlyError};
|
||||
pub use format::{catalog, Catalog};
|
||||
pub use translate::{FailureContext, Operation, TranslateContext, Verbosity};
|
||||
pub use translate::{error_hint_class, FailureContext, Operation, TranslateContext, Verbosity};
|
||||
|
||||
// `translate::translate` and `format::translate` are different
|
||||
// callables — the former is the structured DbError → FriendlyError
|
||||
|
||||
@@ -256,6 +256,8 @@ help:
|
||||
help: |-
|
||||
help — show this command list
|
||||
help <command> — detailed help for one command (e.g. `help insert`)
|
||||
hint: |-
|
||||
hint — explain the most recent error (press F1 for a hint on what you're typing)
|
||||
rebuild: |-
|
||||
rebuild — rebuild the project database from project.yaml + data/ (with confirmation)
|
||||
save: |-
|
||||
@@ -386,6 +388,260 @@ hint:
|
||||
ambient_complete: "Submit with Enter"
|
||||
ambient_expected: "Next: {expected}"
|
||||
ambient_error_with_usage: "{message} — usage: {usage}"
|
||||
# H2 / ADR-0053: shown by `hint` / F1 when there is nothing specific
|
||||
# to expand on (no recent error, empty input).
|
||||
getting_started: "Start typing a command and press F1 for a hint, or type `help` for the full command list."
|
||||
# Tier-3 block scaffolding (ADR-0053 D4): the heading + the labels the
|
||||
# `what` / `example` / `concept` parts render under.
|
||||
block:
|
||||
heading: "Hint"
|
||||
what: "What"
|
||||
example: "Example"
|
||||
concept: "Concept"
|
||||
# ── Tier-3 teaching blocks (ADR-0053 D3) ──────────────────────────
|
||||
# Per-form command hints (`hint.cmd.<form>`) and per-class error
|
||||
# hints (`hint.err.<class>`), each a `what` (1–2 sentences) / `example`
|
||||
# (one runnable, mode-correct line) / `concept` (the relational idea —
|
||||
# the teaching part). Phase B seeds the three approved exemplars; the
|
||||
# rest are authored in Phase C.
|
||||
cmd:
|
||||
insert:
|
||||
what: "Add one or more rows to a table."
|
||||
example: "insert into Customers values ('Ann', 'ann@example.io')"
|
||||
concept: "A row is one record; each value lines up with a column, in order. Columns typed `serial`/`shortid` fill themselves — leave them out."
|
||||
add_relationship:
|
||||
what: "Link two tables so a parent row can own many child rows."
|
||||
example: "add 1:n relationship from Customers.id to Orders.customer_id"
|
||||
concept: "The \"1:n\" means one parent, many children. The child column holds the foreign key; add `--create-fk` to create that column if it doesn't exist yet."
|
||||
# App-lifecycle commands (Phase C batch 1). Reference-leaning, so
|
||||
# `concept` appears only where there's a real idea to teach.
|
||||
quit:
|
||||
what: "Leave the playground. Your project is already saved to disk."
|
||||
example: "quit"
|
||||
help:
|
||||
what: "List every command, or show the detail for one."
|
||||
example: "help insert"
|
||||
concept: "`help` is the reference; press F1 while typing for a hint about the command you're building right now."
|
||||
hint:
|
||||
what: "Explain the most recent error — or, pressing F1 while typing, the command you're building."
|
||||
example: "hint"
|
||||
rebuild:
|
||||
what: "Rebuild the project database from its saved text files."
|
||||
example: "rebuild"
|
||||
concept: "The text files (project.yaml + the data folder) are the source of truth; the database is derived and can always be rebuilt from them."
|
||||
save:
|
||||
what: "Save the current project; `save as` copies it to a new name or location."
|
||||
example: "save as"
|
||||
concept: "On a temporary project, `save` opens a prompt to give it a permanent name; a named project auto-saves as you work, so `save` on one is already done. `save as` always prompts for a new name or path — use it to copy a project."
|
||||
new:
|
||||
what: "Close the current project and start a fresh temporary one."
|
||||
example: "new"
|
||||
load:
|
||||
what: "Open the project picker to switch to a saved project."
|
||||
example: "load"
|
||||
export:
|
||||
what: "Write a shareable zip of the project — its text files only, never the database."
|
||||
example: "export my-shop.zip"
|
||||
concept: "The zip carries the schema and data as text, so anyone can rebuild the very same database from it."
|
||||
import:
|
||||
what: "Unpack a project zip into a new project and switch to it."
|
||||
example: "import my-shop.zip as shop_copy"
|
||||
mode:
|
||||
what: "Switch between simple mode (the guided teaching commands) and advanced mode (raw SQL)."
|
||||
example: "mode advanced"
|
||||
concept: "Simple mode uses keyword commands; advanced mode lets you write SQL directly. A leading `:` runs a single advanced command without switching modes."
|
||||
messages:
|
||||
what: "Show or set how much detail error messages give."
|
||||
example: "messages short"
|
||||
concept: "Verbose (the default) adds a fix-it hint under each error headline; short shows just the headline."
|
||||
undo:
|
||||
what: "Undo the most recent change, after a confirmation."
|
||||
example: "undo"
|
||||
concept: "Every data or schema change is snapshotted first, so you can step back; `redo` re-applies what you undid."
|
||||
redo:
|
||||
what: "Re-apply the most recently undone change."
|
||||
example: "redo"
|
||||
copy:
|
||||
what: "Copy the output panel to the clipboard — all of it, or just the last command's output."
|
||||
example: "copy last"
|
||||
# DDL — schema-shaping commands (Phase C batch 2).
|
||||
create_table:
|
||||
what: "Create a new table and declare its primary key."
|
||||
example: "create table Customers with pk id(serial)"
|
||||
concept: "A table is a set of rows sharing the same columns. `with pk` declares the primary key — one column, or several for a compound key; add the other columns afterwards with `add column`. A `serial` key numbers the rows for you."
|
||||
create_m2n:
|
||||
what: "Create a junction table linking two tables many-to-many."
|
||||
example: "create m:n relationship from Students to Courses"
|
||||
concept: "A many-to-many link (a student takes many courses; a course has many students) can't live in either table, so it gets its own junction table holding a foreign key to each side."
|
||||
add_column:
|
||||
what: "Add a new column to an existing table."
|
||||
example: "add column Customers: phone (text)"
|
||||
concept: "Existing rows take the column's default, or null. A `not null` column with no default can't be added to a table that already has rows — there'd be nothing to put in them."
|
||||
add_index:
|
||||
what: "Create an index on one or more columns to speed up lookups."
|
||||
example: "add index as idx_email on Customers (email)"
|
||||
concept: "An index is a sorted side-structure that makes a lookup like `where email = …` fast, at the cost of a little space and slightly slower writes."
|
||||
add_constraint:
|
||||
what: "Add a constraint — not null, unique, default, or check — to an existing column."
|
||||
example: "add constraint not null to Customers.email"
|
||||
concept: "A constraint is a rule the database enforces on every row. Adding one fails if existing rows already break it, so you fix the data first."
|
||||
drop_table:
|
||||
what: "Remove a table and all of its rows."
|
||||
example: "drop table Customers"
|
||||
concept: "If other tables reference this one through a relationship, drop those relationships (or their child rows) first — the database won't orphan them."
|
||||
drop_column:
|
||||
what: "Remove a column from a table."
|
||||
example: "drop column Customers: phone"
|
||||
concept: "The column's values are lost. You can't drop a primary-key column, or one a relationship depends on."
|
||||
drop_relationship:
|
||||
what: "Remove a relationship between two tables."
|
||||
example: "drop relationship customer_orders"
|
||||
concept: "This drops the foreign-key link and stops the database enforcing it; the tables and their rows stay. The foreign-key column itself remains unless you also drop it."
|
||||
drop_index:
|
||||
what: "Remove an index by name."
|
||||
example: "drop index idx_email"
|
||||
concept: "Only the lookup shortcut goes — the data is untouched. Queries still work, just without that speed-up."
|
||||
drop_constraint:
|
||||
what: "Remove a constraint from a column."
|
||||
example: "drop constraint not null from Customers.email"
|
||||
concept: "The rule stops being enforced from now on; rows already stored are left as they are."
|
||||
rename_column:
|
||||
what: "Rename a column, keeping its values and type."
|
||||
example: "rename column Customers: email to contact_email"
|
||||
concept: "Only the name changes — the stored data is the same. References to the column are reconciled so nothing breaks."
|
||||
change_column:
|
||||
what: "Change a column's type, converting the existing values."
|
||||
example: "change column Customers: status (int)"
|
||||
concept: "The database converts each stored value to the new type; if a value can't convert it refuses the change, so you don't silently lose data. Flags let you force or skip the conversion."
|
||||
# DML — querying and changing data (Phase C batch 3).
|
||||
update:
|
||||
what: "Change values in the rows that match a condition."
|
||||
example: "update Customers set email = 'new@example.io' where id = 1"
|
||||
concept: "The `where` clause picks which rows change, and it's required — pass `--all-rows` to change the whole table on purpose — so you never update more than you meant to."
|
||||
delete:
|
||||
what: "Remove the rows that match a condition."
|
||||
example: "delete from Orders where status = 'cancelled'"
|
||||
concept: "A `where` is required (use `--all-rows` to clear the table on purpose). Rows a relationship points at may be blocked or cascade-deleted, per its `on delete` action."
|
||||
show_data:
|
||||
what: "Show the rows stored in a table."
|
||||
example: "show data Customers"
|
||||
concept: "This reads the data and never changes it. Add a `where` to show only matching rows."
|
||||
show_table:
|
||||
what: "Show a table's structure — its columns, types, keys, and relationships."
|
||||
example: "show table Customers"
|
||||
concept: "Structure, not data: the column definitions and how this table links to others. Use `show data` to see the rows themselves."
|
||||
show_tables:
|
||||
what: "List all the tables in the project."
|
||||
example: "show tables"
|
||||
show_relationships:
|
||||
what: "List all the relationships between tables."
|
||||
example: "show relationships"
|
||||
concept: "Each relationship is a foreign-key link from a child column to a parent's key, with an `on delete` / `on update` rule."
|
||||
show_indexes:
|
||||
what: "List all the indexes in the project."
|
||||
example: "show indexes"
|
||||
concept: "Indexes speed up lookups; this shows which columns each one covers and whether it enforces uniqueness."
|
||||
seed:
|
||||
what: "Fill a table with generated sample rows, or fill one column on existing rows."
|
||||
example: "seed Customers 50"
|
||||
concept: "Seeding invents realistic-looking data so you have something to query. Pin a value with `set col = …`, choose a generator with `as`, or give a numeric range with `between`."
|
||||
explain:
|
||||
what: "Show how the database will run a query — without running it."
|
||||
example: "explain show data Customers where email = 'a@example.io'"
|
||||
concept: "The plan reveals whether the database scans the whole table or jumps straight to rows through an index — the payoff of `add index`. `explain` never executes, so it's safe even on a delete."
|
||||
replay:
|
||||
what: "Re-run the commands recorded in a history file."
|
||||
example: "replay session.log"
|
||||
concept: "Every successful command is journalled, so replaying re-applies them in order to reproduce a project's state — handy for scripting or redoing a sequence."
|
||||
# Advanced-mode SQL forms (Phase C batch 4). Examples are SQL, the
|
||||
# advanced surface — distinct from their simple-mode siblings.
|
||||
sql_create_table:
|
||||
what: "Create a table using SQL syntax (advanced mode)."
|
||||
example: "create table Customers (id int primary key, name text, email text)"
|
||||
concept: "Advanced mode speaks SQL: constraints go inline (`primary key`, `not null`, `unique`, `check`). This is the raw form of simple mode's `create table … with pk …`."
|
||||
sql_alter_table:
|
||||
what: "Change a table's structure with SQL `alter table` (advanced mode)."
|
||||
example: "alter table Customers add column phone text"
|
||||
concept: "`alter table` adds or drops columns, renames, and adds constraints — the SQL equivalent of simple mode's `add column` / `drop column` / `change column`."
|
||||
sql_create_index:
|
||||
what: "Create an index with SQL (advanced mode)."
|
||||
example: "create index ix_email on Customers (email)"
|
||||
concept: "Add `unique` to also forbid duplicate values. The simple-mode equivalent is `add index`."
|
||||
sql_drop_index:
|
||||
what: "Remove an index with SQL (advanced mode)."
|
||||
example: "drop index ix_email"
|
||||
concept: "Only the lookup shortcut goes; the data is untouched. Add `if exists` to ignore a missing index."
|
||||
sql_drop_table:
|
||||
what: "Remove a table with SQL (advanced mode)."
|
||||
example: "drop table Customers"
|
||||
concept: "Add `if exists` to avoid an error when the table might not be there. Relationships pointing at it may block the drop."
|
||||
sql_insert:
|
||||
what: "Insert rows with SQL (advanced mode)."
|
||||
example: "insert into Customers (name, email) values ('Ann', 'ann@example.io')"
|
||||
concept: "Naming the columns lets you supply them in any order and skip ones that have a default — the SQL form of simple mode's `insert`."
|
||||
sql_update:
|
||||
what: "Update rows with SQL (advanced mode)."
|
||||
example: "update Customers set email = 'new@example.io' where id = 1"
|
||||
concept: "`set` lists the new values; `where` picks which rows change. The SQL form of simple mode's `update`."
|
||||
sql_delete:
|
||||
what: "Delete rows with SQL (advanced mode)."
|
||||
example: "delete from Orders where status = 'cancelled'"
|
||||
concept: "`where` picks the rows to remove; foreign-key rules still apply. The SQL form of simple mode's `delete`."
|
||||
select:
|
||||
what: "Query rows with SQL `select` (advanced mode)."
|
||||
example: "select name, email from Customers where id = 1"
|
||||
concept: "`select` is read-only: choose columns (or `*`), filter with `where`, sort with `order by`, cap with `limit`. This is the heart of SQL — and the reason advanced mode exists."
|
||||
with:
|
||||
what: "Name a sub-query (a CTE) and read from it in a `select` (advanced mode)."
|
||||
example: "with recent as (select * from Orders where id > 100) select * from recent"
|
||||
concept: "A `with` clause (Common Table Expression) names a query so the main `select` can use it like a temporary table — handy for breaking a complex query into readable steps."
|
||||
explain_sql:
|
||||
what: "Show how the database will run a SQL query, without running it (advanced mode)."
|
||||
example: "explain select * from Customers where email = 'a@example.io'"
|
||||
concept: "Like simple mode's `explain`, but wraps a raw SQL statement. It reveals whether an index is used, and never executes."
|
||||
err:
|
||||
# Runtime error classes (Phase C batch 5), keyed by
|
||||
# friendly::error_hint_class. `example` is a fix recipe rather than a
|
||||
# runnable line; `concept` is the relational idea behind the rule.
|
||||
foreign_key:
|
||||
child_side:
|
||||
what: "The value you gave for the child column doesn't match any parent row, so the foreign key has nothing to point at."
|
||||
example: "First insert the parent (insert into Customers …), then the child that references it."
|
||||
concept: "A foreign key is a promise that every child points at a real parent, so the parent must exist before a child can reference it. (`on delete` actions like `cascade` or `set null` govern the other direction — what happens to children when their parent is removed — not this one.)"
|
||||
parent_side:
|
||||
what: "You're deleting or changing a row that other rows point at, which would orphan those children."
|
||||
example: "Delete the child rows first, or set the relationship's `on delete` to `cascade` (remove them too) or `set null` (keep them, unlinked)."
|
||||
concept: "A foreign key guarantees every child has a real parent, so the database won't remove a parent out from under its children unless the relationship says what should happen to them."
|
||||
unique:
|
||||
what: "A value you're inserting — or updating to — already exists in a column that must be unique."
|
||||
example: "Pick a different value, or update the existing row instead of inserting a new one."
|
||||
concept: "A unique constraint (and every primary key) forbids duplicates, so each value identifies at most one row."
|
||||
not_null:
|
||||
what: "You left a column empty that is required to have a value."
|
||||
example: "Supply a value for the column, or give it a default so new rows fill it automatically."
|
||||
concept: "A `not null` constraint means every row must have a value there — it's how you mark a fact as mandatory."
|
||||
check:
|
||||
what: "A value broke a `check` rule defined on the column."
|
||||
example: "Use a value the rule allows — for example a positive number, or one of the permitted options."
|
||||
concept: "A `check` constraint is a condition every row must satisfy, so the database enforces business rules like \"price ≥ 0\" for you."
|
||||
type_mismatch:
|
||||
what: "A value doesn't fit the column's type — for instance text where a number is expected."
|
||||
example: "Give a value of the right type: a number for `int`/`real`, a quoted string for `text`, true/false for `bool`."
|
||||
concept: "Every column has a type, and the database rejects values that don't fit, so a column's data stays consistent and comparable."
|
||||
not_found:
|
||||
what: "You named a table or column that doesn't exist."
|
||||
example: "Check the spelling, or run `show tables` (or `show table <name>`) to see what's there."
|
||||
concept: "A command can only refer to tables and columns that already exist — create them first if you need them."
|
||||
already_exists:
|
||||
what: "You tried to create a table, column, relationship, or index whose name is already taken."
|
||||
example: "Pick a different name, or drop the existing one first if you meant to replace it."
|
||||
concept: "Names must be unique within their kind so a command is never ambiguous about what it refers to."
|
||||
generic:
|
||||
what: "The database refused the command for the reason shown above."
|
||||
example: "Read that message for the specifics, adjust the command, and try again."
|
||||
invalid_value:
|
||||
what: "A value or option in the command wasn't valid for where it was used."
|
||||
example: "Check the value against the column's type and the command's accepted options."
|
||||
# Invalid identifier in a schema slot (ADR-0022 stage 8e
|
||||
# + the user's #5). Voice mirrors ADR-0019's "no such
|
||||
# {kind}" wording for consistency with engine errors.
|
||||
@@ -617,6 +873,7 @@ parse:
|
||||
# description.
|
||||
quit: "quit"
|
||||
help: "help [<command>]"
|
||||
hint: "hint"
|
||||
rebuild: "rebuild"
|
||||
save: "save | save as"
|
||||
new: "new"
|
||||
@@ -916,6 +1173,7 @@ shortcut:
|
||||
browse: "browse"
|
||||
clear: "clear"
|
||||
complete: "complete"
|
||||
hint: "hint"
|
||||
history: "history"
|
||||
home_end: "home/end"
|
||||
del_word: "del word"
|
||||
|
||||
@@ -253,6 +253,73 @@ pub fn translate(error: &DbError, ctx: &TranslateContext) -> FriendlyError {
|
||||
fe
|
||||
}
|
||||
|
||||
/// The tier-3 hint class (`hint.err.<class>`) for an error.
|
||||
///
|
||||
/// The same classification [`translate`] performs, surfaced as a
|
||||
/// stable key for the contextual `hint` (H2 / ADR-0053 D5). Returns
|
||||
/// `None` for internal / fatal errors that carry no learner-facing
|
||||
/// hint (persistence, IO, worker-gone).
|
||||
///
|
||||
/// **Keep in sync with [`translate`] / `translate_sqlite` /
|
||||
/// `translate_constraint` / `translate_foreign_key`** — the unit tests
|
||||
/// below pin each class.
|
||||
#[must_use]
|
||||
pub fn error_hint_class(error: &DbError, ctx: &TranslateContext) -> Option<&'static str> {
|
||||
match error {
|
||||
DbError::Sqlite { message, kind } => sqlite_hint_class(message, *kind, ctx),
|
||||
DbError::Unsupported(_) | DbError::InvalidValue(_) => Some("invalid_value"),
|
||||
DbError::PersistenceFatal { .. }
|
||||
| DbError::RebuildRowFailed { .. }
|
||||
| DbError::Io(_)
|
||||
| DbError::WorkerGone => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn sqlite_hint_class(
|
||||
message: &str,
|
||||
kind: SqliteErrorKind,
|
||||
ctx: &TranslateContext,
|
||||
) -> Option<&'static str> {
|
||||
if matches!(ctx.operation, Some(Operation::ChangeColumnType)) {
|
||||
return Some("type_mismatch");
|
||||
}
|
||||
Some(match kind {
|
||||
SqliteErrorKind::NoSuchTable | SqliteErrorKind::NoSuchColumn => "not_found",
|
||||
SqliteErrorKind::AlreadyExists => "already_exists",
|
||||
SqliteErrorKind::UniqueViolation => constraint_hint_class(message, ctx),
|
||||
SqliteErrorKind::Other => "generic",
|
||||
})
|
||||
}
|
||||
|
||||
fn constraint_hint_class(message: &str, ctx: &TranslateContext) -> &'static str {
|
||||
let lower = message.to_ascii_lowercase();
|
||||
if lower.contains("unique constraint failed") {
|
||||
"unique"
|
||||
} else if lower.contains("foreign key constraint failed") {
|
||||
fk_hint_class(ctx)
|
||||
} else if lower.contains("not null constraint failed") {
|
||||
"not_null"
|
||||
} else if lower.contains("check constraint failed") {
|
||||
"check"
|
||||
} else {
|
||||
"generic"
|
||||
}
|
||||
}
|
||||
|
||||
const fn fk_hint_class(ctx: &TranslateContext) -> &'static str {
|
||||
// Mirrors `translate_foreign_key`'s side disambiguation.
|
||||
if ctx.parent_table.is_some() {
|
||||
return "foreign_key.child_side";
|
||||
}
|
||||
if ctx.child_table.is_some() {
|
||||
return "foreign_key.parent_side";
|
||||
}
|
||||
match ctx.operation {
|
||||
Some(Operation::Delete) => "foreign_key.parent_side",
|
||||
_ => "foreign_key.child_side",
|
||||
}
|
||||
}
|
||||
|
||||
fn translate_sqlite(
|
||||
message: &str,
|
||||
kind: SqliteErrorKind,
|
||||
@@ -798,6 +865,92 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
// ── H2 / ADR-0053: error → tier-3 hint class ────────────────
|
||||
|
||||
#[test]
|
||||
fn hint_class_maps_runtime_error_kinds() {
|
||||
use crate::db::{DbError, SqliteErrorKind};
|
||||
let sqlite = |kind, msg: &str| DbError::Sqlite {
|
||||
message: msg.to_string(),
|
||||
kind,
|
||||
};
|
||||
let d = TranslateContext::default;
|
||||
assert_eq!(
|
||||
error_hint_class(&sqlite(SqliteErrorKind::NoSuchTable, "no such table: X"), &d()),
|
||||
Some("not_found")
|
||||
);
|
||||
assert_eq!(
|
||||
error_hint_class(&sqlite(SqliteErrorKind::NoSuchColumn, "no such column: X"), &d()),
|
||||
Some("not_found")
|
||||
);
|
||||
assert_eq!(
|
||||
error_hint_class(&sqlite(SqliteErrorKind::AlreadyExists, "already exists"), &d()),
|
||||
Some("already_exists")
|
||||
);
|
||||
assert_eq!(
|
||||
error_hint_class(&sqlite(SqliteErrorKind::Other, "boom"), &d()),
|
||||
Some("generic")
|
||||
);
|
||||
// Constraint-violation message splitting.
|
||||
let cv = |msg: &str| sqlite(SqliteErrorKind::UniqueViolation, msg);
|
||||
assert_eq!(
|
||||
error_hint_class(&cv("UNIQUE constraint failed: T.c"), &d()),
|
||||
Some("unique")
|
||||
);
|
||||
assert_eq!(
|
||||
error_hint_class(&cv("NOT NULL constraint failed: T.c"), &d()),
|
||||
Some("not_null")
|
||||
);
|
||||
assert_eq!(
|
||||
error_hint_class(&cv("CHECK constraint failed: T"), &d()),
|
||||
Some("check")
|
||||
);
|
||||
// change-column op routes any engine error to type_mismatch.
|
||||
assert_eq!(
|
||||
error_hint_class(
|
||||
&sqlite(SqliteErrorKind::Other, "x"),
|
||||
&ctx_with(Operation::ChangeColumnType)
|
||||
),
|
||||
Some("type_mismatch")
|
||||
);
|
||||
// App-level refusals and internal/fatal errors.
|
||||
assert_eq!(
|
||||
error_hint_class(&DbError::InvalidValue("bad".to_string()), &d()),
|
||||
Some("invalid_value")
|
||||
);
|
||||
assert_eq!(error_hint_class(&DbError::WorkerGone, &d()), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hint_class_resolves_foreign_key_sides() {
|
||||
use crate::db::{DbError, SqliteErrorKind};
|
||||
let fk = || DbError::Sqlite {
|
||||
message: "FOREIGN KEY constraint failed".to_string(),
|
||||
kind: SqliteErrorKind::UniqueViolation,
|
||||
};
|
||||
// Enrichment: parent_table populated → child-side.
|
||||
let ctx = TranslateContext {
|
||||
parent_table: Some("Parent".to_string()),
|
||||
..TranslateContext::default()
|
||||
};
|
||||
assert_eq!(error_hint_class(&fk(), &ctx), Some("foreign_key.child_side"));
|
||||
// child_table populated → parent-side.
|
||||
let ctx = TranslateContext {
|
||||
child_table: Some("Child".to_string()),
|
||||
..TranslateContext::default()
|
||||
};
|
||||
assert_eq!(error_hint_class(&fk(), &ctx), Some("foreign_key.parent_side"));
|
||||
// No enrichment: operation is the tiebreaker.
|
||||
assert_eq!(
|
||||
error_hint_class(&fk(), &ctx_with(Operation::Delete)),
|
||||
Some("foreign_key.parent_side")
|
||||
);
|
||||
assert_eq!(
|
||||
error_hint_class(&fk(), &ctx_with(Operation::Insert)),
|
||||
Some("foreign_key.child_side")
|
||||
);
|
||||
}
|
||||
|
||||
fn sqlite(message: &str, kind: SqliteErrorKind) -> DbError {
|
||||
DbError::Sqlite {
|
||||
message: message.to_string(),
|
||||
|
||||
+13
-13
@@ -1190,7 +1190,7 @@ async fn build_schema_cache(database: &Database) -> crate::completion::SchemaCac
|
||||
// miss leaves that table's columns unpopulated and the
|
||||
// walker falls back to the schemaless value-literal list.
|
||||
for name in cache.tables.clone() {
|
||||
if let Ok(desc) = database.describe_table(name.clone(), None).await {
|
||||
if let Ok(desc) = database.describe_table(name.clone()).await {
|
||||
// Per-table indexes for the items panel (S2, ADR-0025).
|
||||
// Carry uniqueness so the panel can mark a UNIQUE index
|
||||
// (ADR-0035 §4d). Captured before `desc.columns` is
|
||||
@@ -1650,7 +1650,7 @@ async fn build_show_data_echo(
|
||||
limit: Some(_),
|
||||
..
|
||||
} => database
|
||||
.describe_table(name.clone(), None)
|
||||
.describe_table(name.clone())
|
||||
.await
|
||||
.map(|desc| {
|
||||
desc.columns
|
||||
@@ -1732,7 +1732,7 @@ async fn collect_echo_lookups(
|
||||
Command::DropIndex {
|
||||
selector: IndexSelector::Columns { table, columns },
|
||||
} => {
|
||||
if let Ok(desc) = database.describe_table(table.clone(), None).await
|
||||
if let Ok(desc) = database.describe_table(table.clone()).await
|
||||
&& let Some(idx) = desc.indexes.iter().find(|i| i.columns == *columns)
|
||||
{
|
||||
out.drop_index_name = Some(idx.name.clone());
|
||||
@@ -1747,7 +1747,7 @@ async fn collect_echo_lookups(
|
||||
child_column,
|
||||
},
|
||||
} => {
|
||||
if let Ok(desc) = database.describe_table(child_table.clone(), None).await
|
||||
if let Ok(desc) = database.describe_table(child_table.clone()).await
|
||||
&& let Some(rel) = desc.outbound_relationships.iter().find(|r| {
|
||||
// The Endpoints drop selector is single-column
|
||||
// (ADR-0043 keeps DROP by-endpoints single-column;
|
||||
@@ -1771,7 +1771,7 @@ async fn collect_echo_lookups(
|
||||
// resolver API would be the next step if schemas grow.
|
||||
if let Ok(tables) = database.list_tables().await {
|
||||
for table in tables {
|
||||
if let Ok(desc) = database.describe_table(table.clone(), None).await
|
||||
if let Ok(desc) = database.describe_table(table.clone()).await
|
||||
&& desc.outbound_relationships.iter().any(|r| r.name == *name)
|
||||
{
|
||||
out.drop_relationship = Some((name.clone(), table.clone()));
|
||||
@@ -1795,8 +1795,8 @@ async fn collect_echo_lookups(
|
||||
// *before* execution to know which `ADD COLUMN` lines to
|
||||
// emit. The parent columns here are the explicit DSL list,
|
||||
// paired positionally with the child list.
|
||||
let parent_desc = database.describe_table(parent_table.clone(), None).await;
|
||||
let child_desc = database.describe_table(child_table.clone(), None).await;
|
||||
let parent_desc = database.describe_table(parent_table.clone()).await;
|
||||
let child_desc = database.describe_table(child_table.clone()).await;
|
||||
if let (Ok(parent_desc), Ok(child_desc)) = (parent_desc, child_desc) {
|
||||
let mut new_columns: Vec<(String, crate::dsl::types::Type)> = Vec::new();
|
||||
for (child_col, parent_col) in child_columns.iter().zip(parent_columns) {
|
||||
@@ -2064,7 +2064,7 @@ async fn enrich_check_violation(
|
||||
.await
|
||||
.map(|v| v.to_string());
|
||||
// The rule itself — the column's compiled CHECK expression.
|
||||
if let Ok(desc) = database.describe_table(table.to_string(), None).await
|
||||
if let Ok(desc) = database.describe_table(table.to_string()).await
|
||||
&& let Some(col) = desc.columns.iter().find(|c| c.name == column)
|
||||
{
|
||||
facts.check_rule.clone_from(&col.check);
|
||||
@@ -2272,7 +2272,7 @@ async fn user_value_for_column_with_schema(
|
||||
} = command
|
||||
{
|
||||
let desc = database
|
||||
.describe_table(table.to_string(), None)
|
||||
.describe_table(table.to_string())
|
||||
.await
|
||||
.ok()?;
|
||||
// Build the natural-order column list the same way
|
||||
@@ -2311,7 +2311,7 @@ async fn user_value_for_column_with_schema(
|
||||
&& literal_rows.len() == 1
|
||||
{
|
||||
let desc = database
|
||||
.describe_table(table.to_string(), None)
|
||||
.describe_table(table.to_string())
|
||||
.await
|
||||
.ok()?;
|
||||
let idx = desc.columns.iter().position(|c| c.name == column)?;
|
||||
@@ -2930,7 +2930,7 @@ async fn execute_command_typed(
|
||||
.await
|
||||
.map(|d| CommandOutcome::Schema(Some(d))),
|
||||
Command::ShowTable { name } => database
|
||||
.describe_table(name, src)
|
||||
.describe_table(name)
|
||||
.await
|
||||
.map(|d| CommandOutcome::Schema(Some(d))),
|
||||
// ADR-0044: a named relationship renders as a diagram (App-side),
|
||||
@@ -2983,14 +2983,14 @@ async fn execute_command_typed(
|
||||
filter,
|
||||
limit,
|
||||
} => database
|
||||
.query_data(name, filter, limit, src)
|
||||
.query_data(name, filter, limit)
|
||||
.await
|
||||
.map(CommandOutcome::Query),
|
||||
// A SQL `SELECT` (advanced mode; ADR-0030 §6, ADR-0031).
|
||||
// The grammar walker has already validated `sql` is in
|
||||
// the supported subset; the worker runs it as text.
|
||||
Command::Select { sql } => database
|
||||
.run_select(sql, src)
|
||||
.run_select(sql)
|
||||
.await
|
||||
.map(CommandOutcome::Query),
|
||||
// A SQL `INSERT` (advanced mode; ADR-0033 §1). Grammar-as-
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
source: src/app.rs
|
||||
assertion_line: 5844
|
||||
expression: block
|
||||
---
|
||||
Hint
|
||||
What: Add one or more rows to a table.
|
||||
Example: insert into Customers values ('Ann', 'ann@example.io')
|
||||
Concept: A row is one record; each value lines up with a column, in order. Columns typed `serial`/`shortid` fill themselves — leave them out.
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 2836
|
||||
assertion_line: 2839
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ──────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰──────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 2819
|
||||
assertion_line: 2822
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ──────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│for SQL │
|
||||
╰──────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 2827
|
||||
assertion_line: 2830
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ──────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│for SQL │
|
||||
╰──────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3442
|
||||
assertion_line: 3445
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ────────────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -28,4 +28,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3388
|
||||
assertion_line: 3391
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ────────────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -28,4 +28,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3378
|
||||
assertion_line: 3381
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ────────────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -28,4 +28,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3431
|
||||
assertion_line: 3434
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ────────────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -28,4 +28,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3457
|
||||
assertion_line: 3460
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ────────────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -28,4 +28,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰────────────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 2880
|
||||
assertion_line: 2882
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ──────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│insert into <Table> [(<col>[, ...])] [values] (<value>[, ...]) │
|
||||
╰──────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Esc clear · Ctrl-A/E home/end · Ctrl-W del word · Enter run
|
||||
F1 hint · Esc clear · Ctrl-A/E home/end · Ctrl-W del word · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 2896
|
||||
assertion_line: 2898
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ──────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│ │
|
||||
╰──────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Esc clear · Ctrl-A/E home/end · Ctrl-W del word · Enter run
|
||||
F1 hint · Esc clear · Ctrl-A/E home/end · Ctrl-W del word · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3099
|
||||
assertion_line: 3102
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Tables ──────────────────╮╭ Output ────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│ ││for SQL │
|
||||
╰──────────────────────────╯╰────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 2909
|
||||
assertion_line: 2912
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Output ──────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│for SQL │
|
||||
╰──────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
source: src/ui.rs
|
||||
assertion_line: 3209
|
||||
assertion_line: 3212
|
||||
expression: snapshot
|
||||
---
|
||||
╭ Tables ──────────────────╮╭ Output ────────────────────────────────────────────────────────────────────────╮
|
||||
@@ -26,4 +26,4 @@ expression: snapshot
|
||||
│ Orders.customer_id ││for SQL │
|
||||
╰──────────────────────────╯╰────────────────────────────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · Enter run
|
||||
Ctrl-O sidebar · Tab complete · ↑ history · F1 hint · Enter run
|
||||
|
||||
@@ -46,4 +46,4 @@ expression: snapshot
|
||||
│with `mode advanced`, or prefix the line with `:` to run… │
|
||||
╰──────────────────────────────────────────────────────────╯
|
||||
Project: Term Planner
|
||||
Esc clear · Ctrl-A/E home/end · Ctrl-W del word · Ente
|
||||
F1 hint · Esc clear · Ctrl-A/E home/end · Ctrl-W del w
|
||||
|
||||
@@ -1894,22 +1894,25 @@ fn status_bar_bindings(app: &App) -> Vec<(&'static str, String)> {
|
||||
("Enter", crate::t!("shortcut.run")),
|
||||
];
|
||||
}
|
||||
// 4. Editing — the input has text: surface the readline edit keys
|
||||
// (ADR-0049). The highest-value subset stays within the width
|
||||
// budget; Ctrl-K/U remain unadvertised muscle memory.
|
||||
// 4. Editing — the input has text: F1 (the contextual hint for what
|
||||
// you're typing, ADR-0053) leads, then the readline edit keys
|
||||
// (ADR-0049). Ctrl-K/U remain unadvertised muscle memory.
|
||||
if !app.input.is_empty() {
|
||||
return vec![
|
||||
("F1", crate::t!("shortcut.hint")),
|
||||
("Esc", crate::t!("shortcut.clear")),
|
||||
("Ctrl-A/E", crate::t!("shortcut.home_end")),
|
||||
("Ctrl-W", crate::t!("shortcut.del_word")),
|
||||
("Enter", crate::t!("shortcut.run")),
|
||||
];
|
||||
}
|
||||
// 5. Default — empty input, Input focus.
|
||||
// 5. Default — empty input, Input focus. F1 here expands on the most
|
||||
// recent error, or points the user at getting started (ADR-0053).
|
||||
vec![
|
||||
("Ctrl-O", crate::t!("shortcut.nav")),
|
||||
("Tab", crate::t!("shortcut.complete")),
|
||||
("↑", crate::t!("shortcut.history")),
|
||||
("F1", crate::t!("shortcut.hint")),
|
||||
("Enter", crate::t!("shortcut.run")),
|
||||
]
|
||||
}
|
||||
@@ -2664,7 +2667,7 @@ mod tests {
|
||||
#[test]
|
||||
fn strip_default_state_is_nav_complete_history_run() {
|
||||
let app = App::new();
|
||||
assert_eq!(strip_keys(&app), vec!["Ctrl-O", "Tab", "↑", "Enter"]);
|
||||
assert_eq!(strip_keys(&app), vec!["Ctrl-O", "Tab", "↑", "F1", "Enter"]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -2675,7 +2678,7 @@ mod tests {
|
||||
app.input.push_str("create ta");
|
||||
assert_eq!(
|
||||
strip_keys(&app),
|
||||
vec!["Esc", "Ctrl-A/E", "Ctrl-W", "Enter"],
|
||||
vec!["F1", "Esc", "Ctrl-A/E", "Ctrl-W", "Enter"],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ fn rename_column_with_case_variant_table_keeps_metadata_in_step() {
|
||||
.expect("rename column via a case-variant table name");
|
||||
|
||||
let desc = r
|
||||
.block_on(db.describe_table("Items".to_string(), None))
|
||||
.block_on(db.describe_table("Items".to_string()))
|
||||
.expect("describe Items");
|
||||
let amount = desc
|
||||
.columns
|
||||
@@ -126,7 +126,7 @@ fn insert_with_case_variant_table_persists_and_survives_rebuild() {
|
||||
|
||||
let db = fresh_rebuild(db, &project, &r);
|
||||
let rows = r
|
||||
.block_on(db.query_data("Items".to_string(), None, None, None))
|
||||
.block_on(db.query_data("Items".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 1, "the wrong-case insert survived the rebuild (no data loss)");
|
||||
@@ -146,7 +146,7 @@ fn add_column_with_case_variant_table_survives_rebuild() {
|
||||
);
|
||||
|
||||
let db = fresh_rebuild(db, &project, &r);
|
||||
let desc = r.block_on(db.describe_table("Items".to_string(), None)).expect("describe");
|
||||
let desc = r.block_on(db.describe_table("Items".to_string())).expect("describe");
|
||||
let qty = desc.columns.iter().find(|c| c.name == "qty").expect("qty added");
|
||||
assert_eq!(qty.user_type, Some(Type::Int), "qty's user-type survived the rebuild");
|
||||
// The CHECK is intact too (a negative qty is refused under the real table).
|
||||
@@ -224,12 +224,12 @@ fn add_relationship_with_case_variant_tables_survives_rebuild() {
|
||||
add 1:n relationship from parent.id to child.parent_id\n",
|
||||
);
|
||||
// The parent's inbound relationship is visible under the stored case.
|
||||
let p = r.block_on(db.describe_table("Parent".to_string(), None)).expect("describe Parent");
|
||||
let p = r.block_on(db.describe_table("Parent".to_string())).expect("describe Parent");
|
||||
assert_eq!(p.inbound_relationships.len(), 1, "relationship recorded under the stored case");
|
||||
assert_eq!(p.inbound_relationships[0].other_table, "Child");
|
||||
|
||||
let db = fresh_rebuild(db, &project, &r);
|
||||
let p = r.block_on(db.describe_table("Parent".to_string(), None)).expect("describe Parent");
|
||||
let p = r.block_on(db.describe_table("Parent".to_string())).expect("describe Parent");
|
||||
assert_eq!(p.inbound_relationships.len(), 1, "relationship survived the rebuild");
|
||||
assert_eq!(p.inbound_relationships[0].other_table, "Child");
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ fn compound_fk_declares_enforces_and_round_trips() {
|
||||
);
|
||||
|
||||
// describe shows the compound endpoints symmetrically.
|
||||
let city = db.describe_table("City".to_string(), None).await.unwrap();
|
||||
let city = db.describe_table("City".to_string()).await.unwrap();
|
||||
let outbound = &city.outbound_relationships[0];
|
||||
assert_eq!(
|
||||
outbound.local_columns,
|
||||
@@ -329,7 +329,7 @@ fn compound_fk_create_fk_makes_both_child_columns() {
|
||||
)
|
||||
.await
|
||||
.expect("add compound relationship with --create-fk");
|
||||
let city = db.describe_table("City".to_string(), None).await.unwrap();
|
||||
let city = db.describe_table("City".to_string()).await.unwrap();
|
||||
for col in ["c_country", "c_code"] {
|
||||
assert!(
|
||||
city.columns.iter().any(|c| c.name == col),
|
||||
@@ -527,7 +527,7 @@ fn compound_fk_survives_rebuild_from_text() {
|
||||
.await;
|
||||
assert!(bad.is_err(), "compound FK still enforced after rebuild from text");
|
||||
// Endpoints survived the round-trip intact.
|
||||
let city = db.describe_table("City".to_string(), None).await.unwrap();
|
||||
let city = db.describe_table("City".to_string()).await.unwrap();
|
||||
assert_eq!(
|
||||
city.outbound_relationships[0].other_columns,
|
||||
vec!["country".to_string(), "code".to_string()],
|
||||
@@ -563,7 +563,7 @@ fn compound_fk_undo_removes_the_relationship() {
|
||||
.await
|
||||
.expect("add compound relationship");
|
||||
assert_eq!(
|
||||
db.describe_table("City".to_string(), None)
|
||||
db.describe_table("City".to_string())
|
||||
.await
|
||||
.unwrap()
|
||||
.outbound_relationships
|
||||
@@ -573,7 +573,7 @@ fn compound_fk_undo_removes_the_relationship() {
|
||||
// One undo step removes the whole relationship (ADR-0013/0006).
|
||||
db.undo().await.unwrap().expect("undo applied");
|
||||
assert!(
|
||||
db.describe_table("City".to_string(), None)
|
||||
db.describe_table("City".to_string())
|
||||
.await
|
||||
.unwrap()
|
||||
.outbound_relationships
|
||||
|
||||
@@ -76,7 +76,7 @@ fn rebuild_restores_schema_only_project() {
|
||||
|
||||
// Phase 4: confirm Customers exists with the right shape.
|
||||
let desc = rt()
|
||||
.block_on(async { db.describe_table("Customers".to_string(), None).await })
|
||||
.block_on(async { db.describe_table("Customers".to_string()).await })
|
||||
.expect("describe_table");
|
||||
assert_eq!(desc.name, "Customers");
|
||||
let cols: Vec<&str> = desc.columns.iter().map(|c| c.name.as_str()).collect();
|
||||
@@ -143,7 +143,7 @@ fn rebuild_restores_rows_from_csv() {
|
||||
});
|
||||
|
||||
let rows = rt()
|
||||
.block_on(async { db.query_data("Customers".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("Customers".to_string(), None, None).await })
|
||||
.expect("query_data");
|
||||
assert_eq!(rows.rows.len(), 2);
|
||||
let names: Vec<Option<String>> = rows.rows.iter().map(|r| r[1].clone()).collect();
|
||||
@@ -371,7 +371,7 @@ fn rebuild_preserves_created_at_from_yaml() {
|
||||
// Trigger any successful command so project.yaml is
|
||||
// rewritten from the now-rebuilt db state.
|
||||
rt().block_on(async {
|
||||
db.describe_table("T".to_string(), Some("show table T".to_string()))
|
||||
db.describe_table("T".to_string())
|
||||
.await
|
||||
.unwrap();
|
||||
// describe is read-only; force a rewrite by adding a column.
|
||||
@@ -451,7 +451,7 @@ fn rebuild_restores_indexes() {
|
||||
});
|
||||
|
||||
let desc = rt()
|
||||
.block_on(async { db.describe_table("Customers".to_string(), None).await })
|
||||
.block_on(async { db.describe_table("Customers".to_string()).await })
|
||||
.expect("describe_table");
|
||||
assert_eq!(desc.indexes.len(), 1, "index should survive rebuild");
|
||||
assert_eq!(desc.indexes[0].name, "idx_email");
|
||||
|
||||
@@ -173,7 +173,7 @@ fn rebuild_against_populated_db_wipes_and_reloads() {
|
||||
.expect("rebuild");
|
||||
});
|
||||
let rows = rt()
|
||||
.block_on(async { db.query_data("Customers".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("Customers".to_string(), None, None).await })
|
||||
.unwrap();
|
||||
assert_eq!(rows.rows.len(), 1);
|
||||
assert_eq!(rows.rows[0][1].as_deref(), Some("Edna"));
|
||||
|
||||
@@ -362,7 +362,7 @@ fn end_to_end_export_then_import_real_project() {
|
||||
|
||||
// Round-trip: the inserted row is back.
|
||||
let data_view = rt()
|
||||
.block_on(async { imported_db.query_data("Customers".to_string(), None, None, None).await })
|
||||
.block_on(async { imported_db.query_data("Customers".to_string(), None, None).await })
|
||||
.expect("query data");
|
||||
assert_eq!(data_view.rows.len(), 1);
|
||||
// Serial id auto-filled to 1; Name was the inserted value.
|
||||
|
||||
+6
-6
@@ -107,7 +107,7 @@ fn generates_junction_with_compound_pk_and_two_enforced_fks() {
|
||||
assert!(tables.contains(&"Students_Courses".to_string()), "tables: {tables:?}");
|
||||
|
||||
// Two FK columns, both part of the compound PK.
|
||||
let desc = db.describe_table("Students_Courses".to_string(), None).await.unwrap();
|
||||
let desc = db.describe_table("Students_Courses".to_string()).await.unwrap();
|
||||
let cols: Vec<(&str, bool)> =
|
||||
desc.columns.iter().map(|c| (c.name.as_str(), c.primary_key)).collect();
|
||||
assert_eq!(
|
||||
@@ -191,7 +191,7 @@ fn compound_parent_pk_contributes_one_fk_column_each() {
|
||||
.await
|
||||
.expect("create m:n");
|
||||
|
||||
let desc = db.describe_table("Students_Sections".to_string(), None).await.unwrap();
|
||||
let desc = db.describe_table("Students_Sections".to_string()).await.unwrap();
|
||||
let names: Vec<&str> = desc.columns.iter().map(|c| c.name.as_str()).collect();
|
||||
assert_eq!(names, vec!["Students_id", "Sections_course_id", "Sections_term"]);
|
||||
// All three form the compound PK.
|
||||
@@ -221,7 +221,7 @@ fn deleting_a_parent_cascades_to_the_junction() {
|
||||
|
||||
// Deleting the student cascades to the junction (ON DELETE CASCADE).
|
||||
db.delete("Students".to_string(), RowFilter::AllRows, None).await.unwrap();
|
||||
let rows = db.query_data("Students_Courses".to_string(), None, None, None).await.unwrap();
|
||||
let rows = db.query_data("Students_Courses".to_string(), None, None).await.unwrap();
|
||||
assert!(rows.rows.is_empty(), "junction rows should cascade-delete, got {:?}", rows.rows);
|
||||
});
|
||||
}
|
||||
@@ -249,7 +249,7 @@ fn create_m2n_is_one_undo_step() {
|
||||
let tables = db.list_tables().await.unwrap();
|
||||
assert!(!tables.contains(&"Students_Courses".to_string()), "undo should remove the junction: {tables:?}");
|
||||
// The parents' relationships are gone too (the junction held them).
|
||||
let students = db.describe_table("Students".to_string(), None).await.unwrap();
|
||||
let students = db.describe_table("Students".to_string()).await.unwrap();
|
||||
assert!(students.inbound_relationships.is_empty(), "no leftover relationship after undo");
|
||||
});
|
||||
}
|
||||
@@ -321,7 +321,7 @@ fn the_junction_can_be_renamed() {
|
||||
assert!(tables.contains(&"Enrollments".to_string()), "tables: {tables:?}");
|
||||
assert!(!tables.contains(&"Students_Courses".to_string()));
|
||||
// Both relationships survive the rename (rebuild-preserving).
|
||||
let desc = db.describe_table("Enrollments".to_string(), None).await.unwrap();
|
||||
let desc = db.describe_table("Enrollments".to_string()).await.unwrap();
|
||||
assert_eq!(desc.outbound_relationships.len(), 2, "FKs preserved across rename");
|
||||
});
|
||||
}
|
||||
@@ -362,7 +362,7 @@ fn junction_survives_save_and_rebuild() {
|
||||
db.rebuild_from_text(project.path().to_path_buf(), None).await.expect("rebuild");
|
||||
let tables = db.list_tables().await.unwrap();
|
||||
assert!(tables.contains(&"Students_Courses".to_string()), "junction survived: {tables:?}");
|
||||
let desc = db.describe_table("Students_Courses".to_string(), None).await.unwrap();
|
||||
let desc = db.describe_table("Students_Courses".to_string()).await.unwrap();
|
||||
assert_eq!(desc.outbound_relationships.len(), 2, "both FKs reconstructed");
|
||||
assert!(desc.columns.iter().all(|c| c.primary_key), "compound PK reconstructed");
|
||||
});
|
||||
|
||||
@@ -108,13 +108,13 @@ fn replay_runs_advanced_sql_create_table_as_a_write() {
|
||||
|
||||
// The SQL DDL line actually created the structural table…
|
||||
let desc = rt()
|
||||
.block_on(async { db.describe_table("Widget".to_string(), None).await })
|
||||
.block_on(async { db.describe_table("Widget".to_string()).await })
|
||||
.expect("describe");
|
||||
let names: Vec<String> = desc.columns.iter().map(|c| c.name.clone()).collect();
|
||||
assert_eq!(names, vec!["id".to_string(), "name".to_string()]);
|
||||
// …and the following insert (serial id auto-filled) ran against it.
|
||||
let rows = rt()
|
||||
.block_on(async { db.query_data("Widget".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("Widget".to_string(), None, None).await })
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 1);
|
||||
@@ -139,7 +139,7 @@ fn replay_three_lines_dispatches_three_commands() {
|
||||
|
||||
// The dispatched commands actually mutated state.
|
||||
let data_result = rt()
|
||||
.block_on(async { db.query_data("T".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("T".to_string(), None, None).await })
|
||||
.expect("query_data");
|
||||
assert_eq!(data_result.rows.len(), 1, "row inserted");
|
||||
assert_eq!(data_result.rows[0][1].as_deref(), Some("Alice"));
|
||||
@@ -174,7 +174,7 @@ fn replay_of_actual_history_log_runs_ok_commands_and_skips_err() {
|
||||
assert_completed(&events, 3);
|
||||
|
||||
let data_result = rt()
|
||||
.block_on(async { db.query_data("T".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("T".to_string(), None, None).await })
|
||||
.expect("query_data");
|
||||
assert_eq!(data_result.rows.len(), 1, "only the ok INSERT applied");
|
||||
assert_eq!(data_result.rows[0][1].as_deref(), Some("alpha"));
|
||||
@@ -227,7 +227,7 @@ fn replay_skips_app_lifecycle_commands_silently() {
|
||||
other => panic!("expected ReplayCompleted, got {other:?}"),
|
||||
}
|
||||
let data_result = rt()
|
||||
.block_on(async { db.query_data("T".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("T".to_string(), None, None).await })
|
||||
.expect("query_data");
|
||||
assert!(
|
||||
data_result.columns.iter().any(|c| c == "v"),
|
||||
@@ -401,14 +401,14 @@ fn replay_aborts_on_first_parse_failure_and_reports_line() {
|
||||
// but earlier commands stayed applied (table T exists with
|
||||
// the `name` column).
|
||||
let desc = rt()
|
||||
.block_on(async { db.describe_table("T".to_string(), None).await })
|
||||
.block_on(async { db.describe_table("T".to_string()).await })
|
||||
.expect("describe_table");
|
||||
assert!(
|
||||
desc.columns.iter().any(|c| c.name == "name"),
|
||||
"earlier add column should have stayed applied"
|
||||
);
|
||||
let data_result = rt()
|
||||
.block_on(async { db.query_data("T".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("T".to_string(), None, None).await })
|
||||
.expect("query_data");
|
||||
assert!(
|
||||
data_result.rows.is_empty(),
|
||||
@@ -467,7 +467,7 @@ fn replay_rejects_wrong_type_value_in_a_hand_built_script() {
|
||||
// The earlier two lines stayed applied; the failing insert
|
||||
// did not run — state is intact.
|
||||
let data_result = rt()
|
||||
.block_on(async { db.query_data("T".to_string(), None, None, None).await })
|
||||
.block_on(async { db.query_data("T".to_string(), None, None).await })
|
||||
.expect("query_data");
|
||||
assert!(
|
||||
data_result.rows.is_empty(),
|
||||
@@ -527,7 +527,7 @@ fn replay_skips_nested_replay_with_a_warning() {
|
||||
other => panic!("expected ReplayCompleted (nested replay skipped), got {other:?}"),
|
||||
}
|
||||
// The nested file's table was NOT created (the replay was skipped).
|
||||
let cols = rt().block_on(async { db.query_data("T".to_string(), None, None, None).await });
|
||||
let cols = rt().block_on(async { db.query_data("T".to_string(), None, None).await });
|
||||
assert!(cols.is_err(), "inner.commands' table T must not exist (nested replay skipped)");
|
||||
}
|
||||
|
||||
|
||||
@@ -462,7 +462,7 @@ fn app_show_table_renders_relationships_as_compact_diagrams() {
|
||||
rt.block_on(seed_schema(&db));
|
||||
// Orders holds the FK to Customers — an outbound relationship.
|
||||
let desc = rt
|
||||
.block_on(db.describe_table("Orders".to_string(), None))
|
||||
.block_on(db.describe_table("Orders".to_string()))
|
||||
.expect("describe Orders");
|
||||
|
||||
let mut app = App::new();
|
||||
|
||||
+17
-17
@@ -111,7 +111,7 @@ fn e2e_alter_drop_compound_primary_key_member_is_refused() {
|
||||
|
||||
/// The current user-facing type of column `name` in table `T`.
|
||||
fn col_type(db: &Database, r: &tokio::runtime::Runtime, name: &str) -> Option<Type> {
|
||||
r.block_on(db.describe_table("T".to_string(), None))
|
||||
r.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe")
|
||||
.columns
|
||||
.into_iter()
|
||||
@@ -120,7 +120,7 @@ fn col_type(db: &Database, r: &tokio::runtime::Runtime, name: &str) -> Option<Ty
|
||||
}
|
||||
|
||||
fn column_names(db: &Database, r: &tokio::runtime::Runtime) -> Vec<String> {
|
||||
r.block_on(db.describe_table("T".to_string(), None))
|
||||
r.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe")
|
||||
.columns
|
||||
.into_iter()
|
||||
@@ -163,7 +163,7 @@ fn e2e_alter_table_add_rename_drop_and_raw_default_check() {
|
||||
|
||||
// The DEFAULT backfilled the pre-existing row to qty = 0.
|
||||
let rows = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 1);
|
||||
@@ -252,7 +252,7 @@ fn e2e_alter_column_type_clean_and_lossy_convert() {
|
||||
}
|
||||
|
||||
let rows = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 1);
|
||||
@@ -292,7 +292,7 @@ fn e2e_alter_column_type_int_to_serial_is_allowed() {
|
||||
}
|
||||
assert_eq!(col_type(&db, &r, "n"), Some(Type::Serial), "int→serial converted the column");
|
||||
let rows = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows[0][1].as_deref(), Some("100"), "the existing value is preserved");
|
||||
@@ -635,7 +635,7 @@ fn e2e_drop_composite_unique_is_one_undo_step() {
|
||||
.expect("write");
|
||||
r.block_on(run_replay(&db, project.path(), "u.commands"));
|
||||
let has_unique = || {
|
||||
!r.block_on(db.describe_table("T".to_string(), None))
|
||||
!r.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe")
|
||||
.unique_constraints
|
||||
.is_empty()
|
||||
@@ -878,7 +878,7 @@ fn e2e_describe_shows_table_level_constraints() {
|
||||
"events: {events:?}"
|
||||
);
|
||||
|
||||
let desc = r.block_on(db.describe_table("T".to_string(), None)).expect("describe");
|
||||
let desc = r.block_on(db.describe_table("T".to_string())).expect("describe");
|
||||
assert_eq!(
|
||||
desc.unique_constraints,
|
||||
vec![vec!["a".to_string(), "b".to_string()]],
|
||||
@@ -976,7 +976,7 @@ fn e2e_rename_table_with_rows_csv_follows_and_survives_rebuild() {
|
||||
assert!(!csv_path(&project, "Orders").exists(), "data/Orders.csv removed");
|
||||
|
||||
let rows = r
|
||||
.block_on(db.query_data("Purchases".to_string(), None, None, None))
|
||||
.block_on(db.query_data("Purchases".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 2);
|
||||
@@ -991,7 +991,7 @@ fn e2e_rename_table_with_rows_csv_follows_and_survives_rebuild() {
|
||||
"Purchases round-tripped through a fresh rebuild: {tables:?}"
|
||||
);
|
||||
let rows = r
|
||||
.block_on(db.query_data("Purchases".to_string(), None, None, None))
|
||||
.block_on(db.query_data("Purchases".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 2);
|
||||
@@ -1077,7 +1077,7 @@ fn e2e_rename_fk_parent_updates_metadata_and_still_enforces() {
|
||||
);
|
||||
|
||||
// The child's outbound relationship now points at the new parent name.
|
||||
let c = r.block_on(db.describe_table("C".to_string(), None)).expect("describe C");
|
||||
let c = r.block_on(db.describe_table("C".to_string())).expect("describe C");
|
||||
assert_eq!(c.outbound_relationships.len(), 1);
|
||||
assert_eq!(c.outbound_relationships[0].other_table, "Parent");
|
||||
|
||||
@@ -1129,7 +1129,7 @@ fn e2e_rename_fk_child_updates_metadata_and_still_enforces() {
|
||||
);
|
||||
|
||||
// The parent's inbound relationship now names the renamed child.
|
||||
let p = r.block_on(db.describe_table("P".to_string(), None)).expect("describe P");
|
||||
let p = r.block_on(db.describe_table("P".to_string())).expect("describe P");
|
||||
assert_eq!(p.inbound_relationships.len(), 1);
|
||||
assert_eq!(p.inbound_relationships[0].other_table, "Child");
|
||||
|
||||
@@ -1168,7 +1168,7 @@ fn e2e_rename_self_referential_table_updates_both_ends() {
|
||||
);
|
||||
|
||||
// Both ends of the self-reference now name `Tree`.
|
||||
let t = r.block_on(db.describe_table("Tree".to_string(), None)).expect("describe Tree");
|
||||
let t = r.block_on(db.describe_table("Tree".to_string())).expect("describe Tree");
|
||||
assert_eq!(t.outbound_relationships[0].other_table, "Tree");
|
||||
assert_eq!(t.inbound_relationships[0].other_table, "Tree");
|
||||
|
||||
@@ -1216,7 +1216,7 @@ fn e2e_rename_table_keeps_its_index_with_a_stale_name() {
|
||||
"events: {events:?}"
|
||||
);
|
||||
|
||||
let u = r.block_on(db.describe_table("Users".to_string(), None)).expect("describe Users");
|
||||
let u = r.block_on(db.describe_table("Users".to_string())).expect("describe Users");
|
||||
assert_eq!(u.indexes.len(), 1, "the index followed the rename");
|
||||
assert_eq!(
|
||||
u.indexes[0].name, "T_email_idx",
|
||||
@@ -1226,7 +1226,7 @@ fn e2e_rename_table_keeps_its_index_with_a_stale_name() {
|
||||
|
||||
// Survives a fresh rebuild (recreated from IndexSchema on table Users).
|
||||
let db = fresh_rebuild(db, &project, &r);
|
||||
let u = r.block_on(db.describe_table("Users".to_string(), None)).expect("describe Users");
|
||||
let u = r.block_on(db.describe_table("Users".to_string())).expect("describe Users");
|
||||
assert_eq!(u.indexes.len(), 1);
|
||||
assert_eq!(u.indexes[0].name, "T_email_idx");
|
||||
}
|
||||
@@ -1255,7 +1255,7 @@ fn e2e_rename_table_is_one_undo_step() {
|
||||
"undo restored the old table name: {tables:?}"
|
||||
);
|
||||
assert_eq!(
|
||||
r.block_on(db.query_data("Orders".to_string(), None, None, None)).expect("query").rows.len(),
|
||||
r.block_on(db.query_data("Orders".to_string(), None, None)).expect("query").rows.len(),
|
||||
1,
|
||||
"the row is back under the old name"
|
||||
);
|
||||
@@ -1427,7 +1427,7 @@ fn e2e_alter_column_set_default_applies() {
|
||||
))
|
||||
.expect("insert omitting qty");
|
||||
let rows = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(
|
||||
@@ -1473,7 +1473,7 @@ fn e2e_alter_column_drop_default_removes_it() {
|
||||
))
|
||||
.expect("insert omitting qty");
|
||||
let rows = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(
|
||||
|
||||
@@ -55,7 +55,7 @@ fn insert_row(db: &Database, r: &tokio::runtime::Runtime, id: i64, email: &str)
|
||||
}
|
||||
|
||||
fn index(db: &Database, r: &tokio::runtime::Runtime, name: &str) -> Option<(Vec<String>, bool)> {
|
||||
r.block_on(db.describe_table("T".to_string(), None))
|
||||
r.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe")
|
||||
.indexes
|
||||
.into_iter()
|
||||
|
||||
@@ -64,7 +64,7 @@ fn created_table_appears_with_playground_types() {
|
||||
assert!(tables.contains(&"Widget".to_string()));
|
||||
|
||||
let desc = r
|
||||
.block_on(db.describe_table("Widget".to_string(), None))
|
||||
.block_on(db.describe_table("Widget".to_string()))
|
||||
.expect("describe");
|
||||
let types: Vec<(String, Option<Type>)> = desc
|
||||
.columns
|
||||
@@ -98,7 +98,7 @@ fn integer_primary_key_is_plain_int() {
|
||||
))
|
||||
.expect("create");
|
||||
let desc = r
|
||||
.block_on(db.describe_table("T".to_string(), None))
|
||||
.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe");
|
||||
assert_eq!(desc.columns[0].user_type, Some(Type::Int));
|
||||
}
|
||||
@@ -137,7 +137,7 @@ fn serial_pk_autoincrements_in_multi_column_table() {
|
||||
}
|
||||
|
||||
let data = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query");
|
||||
let id_idx = data
|
||||
.columns
|
||||
@@ -220,7 +220,7 @@ fn table_without_primary_key_is_allowed() {
|
||||
))
|
||||
.expect("insert into PK-less table");
|
||||
let data = r
|
||||
.block_on(db.query_data("Notes".to_string(), None, None, None))
|
||||
.block_on(db.query_data("Notes".to_string(), None, None))
|
||||
.expect("query");
|
||||
assert_eq!(data.rows.len(), 1);
|
||||
}
|
||||
@@ -299,7 +299,7 @@ fn default_is_applied_when_column_omitted() {
|
||||
))
|
||||
.expect("insert");
|
||||
let data = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query");
|
||||
let n_idx = data.columns.iter().position(|c| c == "n").expect("n column");
|
||||
assert_eq!(data.rows[0][n_idx].as_deref(), Some("7"), "DEFAULT 7 applied");
|
||||
@@ -381,7 +381,7 @@ fn check_default_and_composite_unique_survive_rebuild() {
|
||||
// A valid row inserts; DEFAULT n=7 survived.
|
||||
r.block_on(ins("1", "1", "5")).expect("valid row");
|
||||
let data = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query");
|
||||
let n_idx = data.columns.iter().position(|c| c == "n").expect("n column");
|
||||
assert_eq!(data.rows[0][n_idx].as_deref(), Some("7"), "DEFAULT survived rebuild");
|
||||
@@ -679,7 +679,7 @@ fn sql_create_table_is_one_undo_step() {
|
||||
/// Sorted `id` column values of table `T`.
|
||||
fn ids(db: &Database, r: &tokio::runtime::Runtime) -> Vec<Option<String>> {
|
||||
let d = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query");
|
||||
let idx = d.columns.iter().position(|c| c == "id").expect("id column");
|
||||
let mut v: Vec<Option<String>> = d.rows.iter().map(|row| row[idx].clone()).collect();
|
||||
@@ -801,7 +801,7 @@ fn dropping_a_column_a_table_check_references_fails_cleanly() {
|
||||
|
||||
// The table is intact: both columns survive (rollback) ...
|
||||
let desc = r
|
||||
.block_on(db.describe_table("T".to_string(), None))
|
||||
.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe still works");
|
||||
assert_eq!(
|
||||
desc.columns.iter().map(|c| c.name.clone()).collect::<Vec<_>>(),
|
||||
@@ -925,14 +925,14 @@ fn foreign_key_creates_named_relationship_visible_in_describe() {
|
||||
.expect("create child with FK");
|
||||
|
||||
// The child has an outbound relationship; the parent an inbound one.
|
||||
let child = r.block_on(db.describe_table("child".to_string(), None)).expect("describe child");
|
||||
let child = r.block_on(db.describe_table("child".to_string())).expect("describe child");
|
||||
assert_eq!(child.outbound_relationships.len(), 1, "child references parent");
|
||||
let rel = &child.outbound_relationships[0];
|
||||
assert_eq!(rel.name, "parent_id_to_child_pid", "auto-named per ADR-0013");
|
||||
assert_eq!(rel.other_table, "parent");
|
||||
assert_eq!(rel.local_columns, vec!["pid".to_string()]);
|
||||
|
||||
let parent = r.block_on(db.describe_table("parent".to_string(), None)).expect("describe parent");
|
||||
let parent = r.block_on(db.describe_table("parent".to_string())).expect("describe parent");
|
||||
assert_eq!(parent.inbound_relationships.len(), 1, "parent is referenced by child");
|
||||
}
|
||||
|
||||
@@ -954,7 +954,7 @@ fn explicit_constraint_name_is_used() {
|
||||
Some("create table child (id serial primary key, pid int, constraint child_to_parent foreign key (pid) references parent(id))".to_string()),
|
||||
))
|
||||
.expect("create child with named FK");
|
||||
let child = r.block_on(db.describe_table("child".to_string(), None)).expect("describe");
|
||||
let child = r.block_on(db.describe_table("child".to_string())).expect("describe");
|
||||
assert_eq!(child.outbound_relationships[0].name, "child_to_parent");
|
||||
}
|
||||
|
||||
@@ -974,7 +974,7 @@ fn bare_references_resolves_to_parent_single_column_pk() {
|
||||
Some("create table child (id serial primary key, pid int references parent)".to_string()),
|
||||
))
|
||||
.expect("create child with bare REFERENCES");
|
||||
let child = r.block_on(db.describe_table("child".to_string(), None)).expect("describe");
|
||||
let child = r.block_on(db.describe_table("child".to_string())).expect("describe");
|
||||
assert_eq!(child.outbound_relationships[0].other_columns, vec!["id".to_string()], "resolved to parent PK");
|
||||
}
|
||||
|
||||
@@ -1108,7 +1108,7 @@ fn create_table_with_fk_is_one_undo_step() {
|
||||
// parent (now un-referenced) can be described without a dangling rel.
|
||||
r.block_on(db.undo()).expect("undo").expect("a step was undone");
|
||||
assert!(!r.block_on(db.list_tables()).unwrap().contains(&"child".to_string()));
|
||||
let parent = r.block_on(db.describe_table("parent".to_string(), None)).expect("describe parent");
|
||||
let parent = r.block_on(db.describe_table("parent".to_string())).expect("describe parent");
|
||||
assert!(parent.inbound_relationships.is_empty(), "the relationship was undone with the table");
|
||||
}
|
||||
|
||||
@@ -1152,7 +1152,7 @@ fn foreign_key_on_delete_cascade_takes_effect() {
|
||||
))
|
||||
.expect("delete parent");
|
||||
let child_rows = r
|
||||
.block_on(db.query_data("child".to_string(), None, None, None))
|
||||
.block_on(db.query_data("child".to_string(), None, None))
|
||||
.expect("query child");
|
||||
assert!(child_rows.rows.is_empty(), "ON DELETE CASCADE removed the child row");
|
||||
}
|
||||
@@ -1232,7 +1232,7 @@ fn fk_survives_a_rebuild_triggering_column_add() {
|
||||
.expect("add column via rebuild");
|
||||
|
||||
// The relationship still exists after the rebuild.
|
||||
let child = r.block_on(db.describe_table("child".to_string(), None)).expect("describe");
|
||||
let child = r.block_on(db.describe_table("child".to_string())).expect("describe");
|
||||
assert_eq!(child.outbound_relationships.len(), 1, "FK survived the column-add rebuild");
|
||||
// And the engine still enforces it (now and after a fresh rebuild).
|
||||
insert_parent_row(&db, &r);
|
||||
@@ -1275,7 +1275,7 @@ fn fk_referential_actions_survive_rebuild() {
|
||||
))
|
||||
.expect("create");
|
||||
r.block_on(db.rebuild_from_text(p.path().to_path_buf(), None)).expect("rebuild");
|
||||
let child = r.block_on(db.describe_table("child".to_string(), None)).expect("describe");
|
||||
let child = r.block_on(db.describe_table("child".to_string())).expect("describe");
|
||||
let rel = &child.outbound_relationships[0];
|
||||
assert_eq!(rel.on_delete, ReferentialAction::Cascade, "ON DELETE survived rebuild");
|
||||
assert_eq!(rel.on_update, ReferentialAction::SetNull, "ON UPDATE survived rebuild");
|
||||
@@ -1299,7 +1299,7 @@ fn dropping_the_child_clears_the_fk_relationship() {
|
||||
.expect("create");
|
||||
r.block_on(db.drop_table("child".to_string(), Some("drop table child".to_string())))
|
||||
.expect("drop child");
|
||||
let parent = r.block_on(db.describe_table("parent".to_string(), None)).expect("describe parent");
|
||||
let parent = r.block_on(db.describe_table("parent".to_string())).expect("describe parent");
|
||||
assert!(parent.inbound_relationships.is_empty(), "dropping the child cleared the relationship");
|
||||
}
|
||||
|
||||
@@ -1341,7 +1341,7 @@ fn bare_self_reference_resolves_to_own_pk() {
|
||||
Some("create table emp (id int primary key, mgr int references emp)".to_string()),
|
||||
))
|
||||
.expect("create self-referential emp with a bare reference");
|
||||
let emp = r.block_on(db.describe_table("emp".to_string(), None)).expect("describe");
|
||||
let emp = r.block_on(db.describe_table("emp".to_string())).expect("describe");
|
||||
assert_eq!(emp.outbound_relationships[0].other_columns, vec!["id".to_string()], "bare self-ref resolved to own PK");
|
||||
// Enforced: a non-existent manager is rejected.
|
||||
r.block_on(db.insert(
|
||||
|
||||
@@ -154,7 +154,7 @@ fn delete_without_where_runs_across_all_rows() {
|
||||
let csv = read_csv(&project, "t").unwrap_or_default();
|
||||
assert!(!csv.contains('a') && !csv.contains('b') && !csv.contains('c'), "no rows left: {csv:?}");
|
||||
let remaining = rt
|
||||
.block_on(db.query_data("t".to_string(), None, None, None))
|
||||
.block_on(db.query_data("t".to_string(), None, None))
|
||||
.expect("query t");
|
||||
assert!(remaining.rows.is_empty(), "table empty after unfiltered delete");
|
||||
}
|
||||
@@ -302,8 +302,8 @@ fn cascade_to_two_children_reports_both() {
|
||||
assert_eq!(by_child.get("Orders"), Some(&2), "two orders cascaded");
|
||||
assert_eq!(by_child.get("Reviews"), Some(&1), "one review cascaded");
|
||||
// Both child CSVs re-persisted to the post-cascade (empty) state.
|
||||
let orders = rt.block_on(db.query_data("Orders".to_string(), None, None, None)).unwrap();
|
||||
let reviews = rt.block_on(db.query_data("Reviews".to_string(), None, None, None)).unwrap();
|
||||
let orders = rt.block_on(db.query_data("Orders".to_string(), None, None)).unwrap();
|
||||
let reviews = rt.block_on(db.query_data("Reviews".to_string(), None, None)).unwrap();
|
||||
assert!(orders.rows.is_empty() && reviews.rows.is_empty(), "both children emptied");
|
||||
let _ = &project;
|
||||
}
|
||||
@@ -361,7 +361,7 @@ fn delete_violating_fk_fails_and_persists_nothing() {
|
||||
let result = run_delete(&db, &rt, input);
|
||||
assert!(result.is_err(), "delete of a referenced parent must be rejected");
|
||||
// Rolled back: Alice survives.
|
||||
let customers = rt.block_on(db.query_data("Customers".to_string(), None, None, None)).unwrap();
|
||||
let customers = rt.block_on(db.query_data("Customers".to_string(), None, None)).unwrap();
|
||||
assert_eq!(customers.rows.len(), 1, "parent row preserved after rejected delete");
|
||||
// No history line for the failed statement (written only on success).
|
||||
let history = std::fs::read_to_string(project.path().join("history.log")).unwrap_or_default();
|
||||
|
||||
@@ -149,7 +149,7 @@ fn seed(db: &Database, rt: &tokio::runtime::Runtime, sql: &str) {
|
||||
}
|
||||
|
||||
fn query(db: &Database, rt: &tokio::runtime::Runtime, table: &str) -> Vec<Vec<Option<String>>> {
|
||||
rt.block_on(db.query_data(table.to_string(), None, None, None))
|
||||
rt.block_on(db.query_data(table.to_string(), None, None))
|
||||
.unwrap_or_else(|e| panic!("query_data {table}: {e:?}"))
|
||||
.rows
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ fn make_t_with_index(db: &Database, r: &tokio::runtime::Runtime) -> String {
|
||||
}
|
||||
|
||||
fn index_names(db: &Database, r: &tokio::runtime::Runtime) -> Vec<String> {
|
||||
r.block_on(db.describe_table("T".to_string(), None))
|
||||
r.block_on(db.describe_table("T".to_string()))
|
||||
.expect("describe")
|
||||
.indexes
|
||||
.into_iter()
|
||||
|
||||
@@ -150,7 +150,7 @@ fn drop_table_is_one_undo_step_and_restores_data() {
|
||||
assert!(r.block_on(db.undo()).expect("undo").is_some(), "the drop was one undo step");
|
||||
assert!(r.block_on(db.list_tables()).unwrap().contains(&"T".to_string()));
|
||||
let data = r
|
||||
.block_on(db.query_data("T".to_string(), None, None, None))
|
||||
.block_on(db.query_data("T".to_string(), None, None))
|
||||
.expect("query");
|
||||
assert_eq!(data.rows.len(), 1, "the dropped row was restored by undo");
|
||||
}
|
||||
|
||||
+10
-16
@@ -215,7 +215,7 @@ fn decimal_aggregation_display_trims_ieee754_noise() {
|
||||
|
||||
// The reported case: the aggregate no longer leaks float noise.
|
||||
let agg = rt
|
||||
.block_on(db.run_select("select sum(price * qty) from Products".to_string(), None))
|
||||
.block_on(db.run_select("select sum(price * qty) from Products".to_string()))
|
||||
.expect("aggregate select");
|
||||
assert_eq!(
|
||||
agg.rows[0][0].as_deref(),
|
||||
@@ -226,7 +226,7 @@ fn decimal_aggregation_display_trims_ieee754_noise() {
|
||||
// Raw decimal column is still exact — TEXT storage preserves
|
||||
// the input string verbatim, including the trailing zero.
|
||||
let raw = rt
|
||||
.block_on(db.run_select("select price from Products".to_string(), None))
|
||||
.block_on(db.run_select("select price from Products".to_string()))
|
||||
.expect("raw decimal select");
|
||||
let prices: Vec<&str> = raw.rows.iter().map(|r| r[0].as_deref().unwrap()).collect();
|
||||
assert_eq!(
|
||||
@@ -240,10 +240,7 @@ fn decimal_aggregation_display_trims_ieee754_noise() {
|
||||
fn database_run_select_constant_returns_a_single_row() {
|
||||
let (_p, db, _dir) = open_project_db();
|
||||
let data = rt()
|
||||
.block_on(db.run_select(
|
||||
"select 1".to_string(),
|
||||
Some("select 1".to_string()),
|
||||
))
|
||||
.block_on(db.run_select("select 1".to_string()))
|
||||
.expect("`select 1` runs clean");
|
||||
assert_eq!(data.rows.len(), 1, "one result row");
|
||||
assert_eq!(data.rows[0].len(), 1, "one column");
|
||||
@@ -288,7 +285,7 @@ fn database_run_select_from_user_table_returns_inserted_rows() {
|
||||
.expect("insert row");
|
||||
});
|
||||
let data = rt
|
||||
.block_on(db.run_select("select Name from T".to_string(), None))
|
||||
.block_on(db.run_select("select Name from T".to_string()))
|
||||
.expect("SELECT runs");
|
||||
assert_eq!(data.rows.len(), 1);
|
||||
assert_eq!(data.rows[0][0].as_deref(), Some("Ada"));
|
||||
@@ -336,7 +333,7 @@ fn database_run_select_recovers_bool_column_type() {
|
||||
.expect("insert row");
|
||||
});
|
||||
let data = rt
|
||||
.block_on(db.run_select("select Active from Products".to_string(), None))
|
||||
.block_on(db.run_select("select Active from Products".to_string()))
|
||||
.expect("SELECT runs");
|
||||
assert_eq!(data.rows.len(), 2);
|
||||
assert_eq!(data.column_types, vec![Some(Type::Bool)]);
|
||||
@@ -374,7 +371,7 @@ fn database_run_select_recovers_text_type_through_alias() {
|
||||
// playground type is recovered.
|
||||
let data = rt
|
||||
.block_on(
|
||||
db.run_select("select Name as n from Users".to_string(), None),
|
||||
db.run_select("select Name as n from Users".to_string()),
|
||||
)
|
||||
.expect("SELECT runs");
|
||||
assert_eq!(data.columns, vec!["n".to_string()]);
|
||||
@@ -402,7 +399,7 @@ fn database_run_select_computed_expression_stays_typeless() {
|
||||
.expect("insert");
|
||||
});
|
||||
let data = rt
|
||||
.block_on(db.run_select("select Score + 1 from T".to_string(), None))
|
||||
.block_on(db.run_select("select Score + 1 from T".to_string()))
|
||||
.expect("SELECT runs");
|
||||
assert_eq!(data.column_types, vec![None]);
|
||||
}
|
||||
@@ -439,7 +436,6 @@ fn engine_aggregate_in_where_routes_through_catalog() {
|
||||
let err = rt
|
||||
.block_on(db.run_select(
|
||||
"select id from T where count(score) > 0".to_string(),
|
||||
None,
|
||||
))
|
||||
.expect_err("engine should reject aggregate in WHERE");
|
||||
let DbError::Sqlite { .. } = &err else {
|
||||
@@ -512,7 +508,6 @@ fn engine_group_by_missing_routes_through_catalog() {
|
||||
let _ = rt
|
||||
.block_on(db.run_select(
|
||||
"select category, count(*) from T group by category".to_string(),
|
||||
None,
|
||||
))
|
||||
.expect("benign GROUP BY query runs");
|
||||
// Direct unit test on the matcher: ensure a message that
|
||||
@@ -574,7 +569,6 @@ fn engine_scalar_subquery_too_many_rows_routes_through_catalog() {
|
||||
let _ = rt
|
||||
.block_on(db.run_select(
|
||||
"select (select v from T) from T".to_string(),
|
||||
None,
|
||||
))
|
||||
.expect("benign scalar subquery query runs");
|
||||
let synthetic = DbError::Sqlite {
|
||||
@@ -624,13 +618,13 @@ fn database_run_select_type_recovery_works_on_empty_table() {
|
||||
});
|
||||
// No INSERT — the table is empty.
|
||||
let data_text = rt
|
||||
.block_on(db.run_select("select col_text from Empty".to_string(), None))
|
||||
.block_on(db.run_select("select col_text from Empty".to_string()))
|
||||
.expect("SELECT runs even on empty table");
|
||||
assert!(data_text.rows.is_empty());
|
||||
assert_eq!(data_text.column_types, vec![Some(Type::Text)]);
|
||||
|
||||
let data_blob = rt
|
||||
.block_on(db.run_select("select col_blob from Empty".to_string(), None))
|
||||
.block_on(db.run_select("select col_blob from Empty".to_string()))
|
||||
.expect("SELECT runs even on empty table");
|
||||
assert!(data_blob.rows.is_empty());
|
||||
assert_eq!(
|
||||
@@ -723,7 +717,7 @@ fn database_run_select_recovers_all_ten_playground_types() {
|
||||
for (col, expected_type) in cases {
|
||||
let sql = format!("select {col} from AllTypes");
|
||||
let data = rt
|
||||
.block_on(db.run_select(sql.clone(), None))
|
||||
.block_on(db.run_select(sql.clone()))
|
||||
.expect("SELECT runs");
|
||||
assert_eq!(
|
||||
data.column_types,
|
||||
|
||||
@@ -501,7 +501,7 @@ fn update_all_rows_flag_in_advanced_updates_every_row() {
|
||||
"the --all-rows update replays through the DSL fall-back; events: {events:?}"
|
||||
);
|
||||
let rows = rt
|
||||
.block_on(db.query_data("t".to_string(), None, None, None))
|
||||
.block_on(db.query_data("t".to_string(), None, None))
|
||||
.expect("query")
|
||||
.rows;
|
||||
assert_eq!(rows.len(), 2, "both rows present");
|
||||
|
||||
@@ -63,7 +63,7 @@ async fn insert_named(db: &Database, name: &str) {
|
||||
}
|
||||
|
||||
async fn row_count(db: &Database) -> usize {
|
||||
db.query_data("Customers".to_string(), None, None, None)
|
||||
db.query_data("Customers".to_string(), None, None)
|
||||
.await
|
||||
.unwrap()
|
||||
.rows
|
||||
@@ -306,7 +306,7 @@ async fn sql_delete(db: &Database, input: &str) {
|
||||
}
|
||||
|
||||
async fn count_t(db: &Database) -> usize {
|
||||
db.query_data("T".to_string(), None, None, None)
|
||||
db.query_data("T".to_string(), None, None)
|
||||
.await
|
||||
.unwrap()
|
||||
.rows
|
||||
@@ -378,7 +378,7 @@ fn undo_restores_db_and_csv_consistently() {
|
||||
// Both the database read model and the on-disk CSV are
|
||||
// restored — the (db, csv) pair stays consistent.
|
||||
assert_eq!(
|
||||
db.query_data("T".to_string(), None, None, None)
|
||||
db.query_data("T".to_string(), None, None)
|
||||
.await
|
||||
.unwrap()
|
||||
.rows
|
||||
|
||||
@@ -250,6 +250,7 @@ fn command_kind_label(cmd: &rdbms_playground::dsl::Command) -> String {
|
||||
App(app) => match app {
|
||||
AppCommand::Quit => "App(Quit)".into(),
|
||||
AppCommand::Help { .. } => "App(Help)".into(),
|
||||
AppCommand::Hint => "App(Hint)".into(),
|
||||
AppCommand::Rebuild => "App(Rebuild)".into(),
|
||||
AppCommand::Save => "App(Save)".into(),
|
||||
AppCommand::SaveAs => "App(SaveAs)".into(),
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# build output
|
||||
dist/
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
# Starlight Starter Kit: Basics
|
||||
|
||||
[](https://starlight.astro.build)
|
||||
|
||||
```
|
||||
pnpm create astro@latest -- --template starlight
|
||||
```
|
||||
|
||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||
|
||||
## 🚀 Project Structure
|
||||
|
||||
Inside of your Astro + Starlight project, you'll see the following folders and files:
|
||||
|
||||
```
|
||||
.
|
||||
├── public/
|
||||
├── src/
|
||||
│ ├── assets/
|
||||
│ ├── content/
|
||||
│ │ └── docs/
|
||||
│ └── content.config.ts
|
||||
├── astro.config.mjs
|
||||
├── package.json
|
||||
└── tsconfig.json
|
||||
```
|
||||
|
||||
Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name.
|
||||
|
||||
Images can be added to `src/assets/` and embedded in Markdown with a relative link.
|
||||
|
||||
Static assets, like favicons, can be placed in the `public/` directory.
|
||||
|
||||
## 🧞 Commands
|
||||
|
||||
All commands are run from the root of the project, from a terminal:
|
||||
|
||||
| Command | Action |
|
||||
| :------------------------ | :----------------------------------------------- |
|
||||
| `pnpm install` | Installs dependencies |
|
||||
| `pnpm dev` | Starts local dev server at `localhost:4321` |
|
||||
| `pnpm build` | Build your production site to `./dist/` |
|
||||
| `pnpm preview` | Preview your build locally, before deploying |
|
||||
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||
| `pnpm astro -- --help` | Get help using the Astro CLI |
|
||||
|
||||
## 👀 Want to learn more?
|
||||
|
||||
Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).
|
||||
@@ -0,0 +1,254 @@
|
||||
# Documentation style guide (living)
|
||||
|
||||
This is the **living** home for documentation authoring conventions for the
|
||||
RDBMS Playground website. It grows as we write.
|
||||
|
||||
- **Binding rules** come from
|
||||
[ADR-website-001 §7](../docs/website/adr/20260604-adr-website-001.md);
|
||||
this guide must not contradict them. If a convention is significant,
|
||||
durable, or contested, it is decided in an **ADR** (new or amended), and
|
||||
this guide references it. Finer, settled conventions live here directly.
|
||||
- **Open decisions** (not yet settled) are tracked at the bottom so we
|
||||
decide them deliberately rather than re-deciding per page. When one
|
||||
settles, move it up into the body (and to an ADR if it's significant).
|
||||
|
||||
Status tags used below: **[DECIDED]** (binding or settled) ·
|
||||
**[OPEN]** (to be decided — see the log).
|
||||
|
||||
---
|
||||
|
||||
## Terminology & wording [DECIDED — ADR-website-001 §7]
|
||||
|
||||
- **No "DSL".** It is internal jargon. Use **simple mode** (the playground's
|
||||
keyword command language) and **advanced mode** (SQL).
|
||||
- **No engine name.** Never name SQLite / STRICT / rusqlite / PRAGMA in
|
||||
user-facing copy. Say **"the database"** or **"the engine"**. (Continues
|
||||
the user-facing posture of ADR-0002.)
|
||||
- Preferred terms (extend as we go): "command", "project", "table",
|
||||
"column", "relationship" (the user-facing word for a declared foreign-key
|
||||
link), "constraint", "index".
|
||||
- Add new banned/preferred terms here as they come up, with a one-line
|
||||
reason.
|
||||
|
||||
## Voice & tone [DECIDED, refine as needed]
|
||||
|
||||
- **Teaching-first.** Pedagogy wins ties (CLAUDE.md). Explain the *why*, not
|
||||
just the *how*; the audience spans beginners through learners ready for
|
||||
raw SQL.
|
||||
- Second person ("you"), present tense. Imperative mood for step
|
||||
instructions ("Create a table…").
|
||||
- Prefer short sentences and concrete examples over abstract prose.
|
||||
|
||||
## Structure [DECIDED]
|
||||
|
||||
Pragmatic, Diátaxis-influenced split (five top-level sidebar sections,
|
||||
autogenerated per directory under `src/content/docs/`):
|
||||
|
||||
- **Getting started** — install, first project, simple vs. advanced, the
|
||||
example database.
|
||||
- **Using the playground** — *the application you drive*, kept distinct from
|
||||
the database-language Reference: command-line options, the assistive editor
|
||||
(completion / highlighting / `[ERR]`/`[WRN]` indicator / hints / in-line
|
||||
editing), the output pane (scrolling), projects (save/load/new/rebuild),
|
||||
undo & history, export & import, clipboard, getting help. (ADR-0003's
|
||||
"app-level commands" + ADR-0022/0027 typing assistance + the CLI.)
|
||||
- **Guides** — task-oriented how-tos. *These are the most important didactic
|
||||
content and will be iterated for teaching quality before publication.*
|
||||
- **Reference** — the exhaustive command/SQL/type surface. **Page
|
||||
granularity: one page per topic / command-family** (Tables, Columns,
|
||||
Relationships, Indexes, Constraints, Inserting & editing data, Querying,
|
||||
Types, …), each covering the simple-mode and advanced-mode forms where
|
||||
both apply. Hand-written now (the command surface is settled bar H1a
|
||||
output); small post-release adjustments are expected and fine.
|
||||
- **Concepts** — the "why": projects & storage, undo & history, etc.
|
||||
|
||||
Ground every reference page in source — `parse.usage.*` and `help.*` in
|
||||
`src/friendly/strings/en-US.yaml`, `src/dsl/command.rs`, `src/dsl/types.rs`
|
||||
— never paraphrase grammar from memory.
|
||||
|
||||
## "Planned / not yet available" callouts [DECIDED — ADR-website-001 §7]
|
||||
|
||||
Any capability that is not yet fully implemented is **omitted** or carries a
|
||||
clear callout — never presented as shipped. Standard form: a Starlight aside
|
||||
|
||||
```md
|
||||
:::caution[Planned]
|
||||
This is planned and not yet available.
|
||||
:::
|
||||
```
|
||||
|
||||
## Examples & code [DECIDED]
|
||||
|
||||
- **Shared example database: a small library** — `authors`, `books`,
|
||||
`members`, `loans` (see the canonical schema below). Reuse it across all
|
||||
pages so readers build familiarity; it models 1:n (an author has many
|
||||
books) and m:n (books ↔ members, through loans).
|
||||
- Where both modes apply, show the **simple-mode** form and its
|
||||
**advanced-mode (SQL)** equivalent — the in-app teaching echo already
|
||||
pairs these, so docs mirror it.
|
||||
- Prefer **worked examples** (a real command on the library schema) over
|
||||
abstract prose, and **always cross-link** the related reference/guide
|
||||
pages (use stubs so links resolve before a page is written).
|
||||
- Code blocks for exact input/output; reserve casts for motion/flow.
|
||||
|
||||
### Code-block fences
|
||||
|
||||
- **Simple-mode commands → ` ```rdbms `** — custom highlight grammar in
|
||||
`src/grammars/rdbms.mjs`, registered with Expressive Code in
|
||||
`astro.config.mjs` (keywords + types coloured).
|
||||
- **Advanced-mode SQL → ` ```sql `**; shell / install → ` ```sh `.
|
||||
- A decorative `> ` prompt is prepended to `rdbms` lines via CSS
|
||||
(`src/styles/global.css`) — **do not type `>` in the fence**. It is
|
||||
copy-safe (Expressive Code's copy button uses `data-code`) and
|
||||
`user-select:none`.
|
||||
- **One command per line** in an `rdbms` block; a multi-line single
|
||||
statement (e.g. advanced `CREATE TABLE`) belongs in a ` ```sql ` block,
|
||||
where no prompt is added.
|
||||
- **Command output → a plain unlabelled ` ``` ` fence** placed immediately
|
||||
after the command block (no language, so no `> ` prompt and no
|
||||
highlighting). Output must be **captured from the real app**, never
|
||||
hand-drawn — box-drawing diagrams, query-plan trees, and data tables are
|
||||
copied verbatim (trailing padding spaces trimmed). The capture method: a
|
||||
throwaway in-crate test that builds the canonical library schema and prints
|
||||
the rendered output (`render_structure_with_diagrams`,
|
||||
`render_relationship_diagram`, `render_data_table`, `render_explain_plan`,
|
||||
`show_list`), removed once the output is pasted. Colour is lost in a static
|
||||
block (the structure still reads); the coloured/animated rendering is
|
||||
earmarked for casts.
|
||||
|
||||
### Canonical library schema (source of truth for examples)
|
||||
|
||||
Use these exact names/types in every example:
|
||||
|
||||
| Table | Columns (playground types) |
|
||||
|-----------|---------------------------------------------------------------------------------------------|
|
||||
| `authors` | `author_id` serial (pk) · `name` text (not null) · `birth_year` int |
|
||||
| `books` | `book_id` serial (pk) · `title` text (not null) · `author_id` int (→ authors) · `published` int · `isbn` text (unique) |
|
||||
| `members` | `member_id` serial (pk) · `name` text (not null) · `joined` date |
|
||||
| `loans` | `loan_id` serial (pk) · `book_id` int (→ books) · `member_id` int (→ members) · `loaned_on` date · `returned_on` date |
|
||||
|
||||
Relationships: `books.author_id → authors.author_id` (1:n); `loans` joins
|
||||
`books` and `members` (the m:n bridge). Show `shortid` on the Types page via
|
||||
a small standalone example, not by complicating this schema.
|
||||
|
||||
## asciinema casts [DECIDED]
|
||||
|
||||
- Casts show *flow/motion*; static code blocks show *exact input/output*.
|
||||
Prefer a code block when a still example suffices.
|
||||
- Pair a hero/landing cast with a text transcript or the equivalent docs
|
||||
snippet (accessibility + SEO).
|
||||
|
||||
### Where to use a cast [DECIDED 2026-06-10; stance revised 2026-06-12]
|
||||
|
||||
**Default to a cast; justify its _absence_, not its presence.** A cast at the
|
||||
top of a page gives the reader the *shape* of what the page describes —
|
||||
quickly and visually — with the detailed text below for when they need it. It
|
||||
earns its place two ways, both observed in real use: it helps **visual
|
||||
learners** grasp a flow at a glance, and it gives **advanced learners a fast
|
||||
entry point and overview** — skim the motion, then drop into the prose only
|
||||
where needed. So the question for each page is not "does this deserve a cast?"
|
||||
but "is there a good reason *not* to have one?"
|
||||
|
||||
This is **not** a mandate for a cast on every page, still less several per
|
||||
page: a page wants a cast only where the app *does something* worth seeing, and
|
||||
one well-chosen cast is almost always enough. Concretely:
|
||||
|
||||
- **Expect a cast** on any page where the app *does or shows* something: the
|
||||
landing, **Getting started**, **Using the playground**, **Guides**, and the
|
||||
**Reference** command pages (a command being run, a diagram drawn, a query
|
||||
plan or a table of generated rows appearing).
|
||||
- **Justify the absence** on the rest — pure-lookup or conceptual pages with
|
||||
nothing to animate (e.g. the Types table, prose Concepts pages). "Nothing
|
||||
moves here" is a fine reason to record on; "I didn't think about it" is not.
|
||||
- Reference pages keep their **captured static output** regardless; a cast
|
||||
complements it, never replaces it.
|
||||
- A cast is **selective**: it shows a chosen, representative slice of what the
|
||||
page documents — it need not exercise every command on the page.
|
||||
- **Autoplay only the landing hero**; elsewhere casts are click-to-play (a
|
||||
poster frame) so they don't all clamor at once. All casts re-record in one
|
||||
`pnpm casts` run, so breadth stays maintainable.
|
||||
|
||||
### Cast pacing & clarity [DECIDED 2026-06-11]
|
||||
|
||||
- **Give the viewer a beat before a command is submitted.** A command that is
|
||||
typed and `Enter`-ed in the same instant vanishes before the viewer can read
|
||||
it. Type, **pause**, then submit — especially for **modal confirmations**
|
||||
(e.g. the `save as` name prompt) and short commands (`new`): script the text
|
||||
and the `Enter` as *separate* steps with a pause between (`{ type: 'x',
|
||||
enter: false, after: … }` then `{ key: 'Enter', after: … }`).
|
||||
- **Surface state where the schema sidebar would.** At the cast width (90 cols)
|
||||
the schema sidebar is hidden (ADR-0046 hides it at ≤90 cols), so the viewer
|
||||
can't see tables/relationships appear and disappear. Insert `show tables` /
|
||||
`show table <T>` / `show data <T>` at the points where state **changes**, so
|
||||
a sequence reads clearly (e.g. the projects cast shows `show tables` before
|
||||
saving, after `new`, and after loading — table present → none → present).
|
||||
- **Driver: `autocast`** (ADR-website-001 §2; chosen by the 2026-06-10
|
||||
spike). `autocast`'s `!Interactive` feeds keys to the running TUI and
|
||||
captures the redraw — the correct model for a full-screen crossterm app.
|
||||
`asciinema-automation` was rejected: it assumes *shell* semantics (Enter as
|
||||
`\n`, and an `expect()` echo-check per keystroke), which a redrawing TUI
|
||||
breaks — it produced a garbled cast.
|
||||
- **Authoring workflow.** Source command-lists live in `casts-src/casts.mjs`
|
||||
(human-readable steps: `type` / `wait` / `key`). `pnpm casts` runs
|
||||
`casts-src/generate.mjs`, which expands them to autocast YAML (one key per
|
||||
character; Enter = `^M`) and records to `public/casts/<name>.cast`. The
|
||||
command-lists are the durable source; **`.cast` files are regenerable** —
|
||||
re-run `pnpm casts` to re-record as the app evolves (a final sweep is due
|
||||
once the app is locked). Needs a `cargo build` binary at `../target/debug`.
|
||||
- **Embedding.** `Demo.astro` (the WASM-swap seam, ADR-website-001 §3) wraps
|
||||
`Cast.astro` (asciinema-player island). Call sites use `Demo`.
|
||||
- **Conventions.** Terminal geometry per cast (default 90×26); file name =
|
||||
cast `name`; player theme `asciinema`. **Cast theme — fixed dark for launch
|
||||
(DECIDED 2026-06-11).** Casts bake the app's dark theme into the recording as
|
||||
RGB SGR codes, so the player theme can't recolour them; true light/dark would
|
||||
require recording light-theme cast variants and swapping via the `Demo` seam.
|
||||
Deferred as not worth the doubled asset/recording cost for launch; revisit
|
||||
with the eventual full re-record.
|
||||
|
||||
## Formatting [DECIDED, refine]
|
||||
|
||||
- Starlight asides for notes/tips/cautions; tables for reference matrices
|
||||
(types, constraints, referential actions).
|
||||
- Keyboard keys rendered consistently (e.g. <kbd>Ctrl</kbd>+<kbd>Z</kbd>).
|
||||
- Cross-link related pages; never expose ADR numbers or internal jargon to
|
||||
the reader (ADRs are for us, not the docs audience).
|
||||
|
||||
---
|
||||
|
||||
## Open decisions log
|
||||
|
||||
Decide these as we write; record the outcome (and escalate to an ADR if
|
||||
significant).
|
||||
|
||||
**Resolved (2026-06-10):**
|
||||
9. ~~Cast scripting toolchain~~ → **`autocast`**, proven by spike over
|
||||
`asciinema-automation` (which can't drive a full-screen TUI). Source
|
||||
command-lists in `casts-src/`, `pnpm casts` to record. See the *asciinema
|
||||
casts* section above. (Remaining sub-item: light/dark player theme sync —
|
||||
folded into #8 / Phase B.)
|
||||
|
||||
**Resolved (2026-06-05):**
|
||||
1. ~~Depth / organising spine~~ → **Pragmatic** four-section split (see
|
||||
Structure above).
|
||||
2. ~~Page granularity~~ → **one page per topic / command-family**, both
|
||||
modes per page (see Structure).
|
||||
3. ~~Standard example dataset~~ → **the library** (schema above).
|
||||
4. ~~Simple-vs-advanced pairing~~ → **show both where both apply** (see
|
||||
Examples).
|
||||
5. ~~"Planned" callout~~ → standard `:::caution[Planned]` aside (see above).
|
||||
6. ~~Reference generation vs hand-writing~~ → **hand-write now** (command
|
||||
surface is settled bar H1a output; small later adjustments expected).
|
||||
|
||||
**Resolved (2026-06-11):**
|
||||
7. ~~Versioning~~ → **single-version for launch.** No version selector; one can
|
||||
be added at/after v1 if the docs ever need to diverge by version.
|
||||
Cast light/dark → **fixed dark for launch** (see *asciinema casts* above).
|
||||
`site` set to **`https://relplay.org`** (apex) — enables sitemap, canonical,
|
||||
and Open Graph URL resolution; a `www` host, if used, 301-redirects to apex.
|
||||
|
||||
**Still open:**
|
||||
8. **SEO/meta — remaining.** Per-page titles/descriptions are set; canonical +
|
||||
basic Open Graph (`og:title`/`og:url`) now auto-generate from `site`. What
|
||||
remains: **Open Graph social-card images** (`og:image`) — needs a card
|
||||
design, so it travels with the branding work (logo + palette, TBD with the
|
||||
user; the existing favicon is *not* a brand guideline).
|
||||
@@ -0,0 +1,81 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from 'astro/config';
|
||||
import starlight from '@astrojs/starlight';
|
||||
|
||||
import tailwindcss from '@tailwindcss/vite';
|
||||
|
||||
// Custom highlight grammar for the playground's simple-mode command language
|
||||
// (advanced-mode examples use the built-in `sql` grammar). Fence with ```rdbms.
|
||||
import rdbmsLang, { rdbmsSyntax } from './src/grammars/rdbms.mjs';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
// Production origin (apex domain). Enables the sitemap, canonical URLs, and
|
||||
// Open Graph `og:url`/`og:image` resolution. A `www` host, if used, should
|
||||
// 301-redirect here so a single canonical origin is advertised. Local dev is
|
||||
// unaffected — this only changes *generated absolute* URLs, not where the
|
||||
// dev/preview server binds.
|
||||
site: 'https://relplay.org',
|
||||
// Bind the dev/preview server to IPv4 loopback. Astro/Vite's default
|
||||
// `localhost` bind resolves to IPv6 `::1` here, which breaks SSH
|
||||
// `-L 4321:127.0.0.1:4321` tunnels (they target IPv4). Pinning 127.0.0.1
|
||||
// keeps loopback-only access and makes tunnelling unambiguous.
|
||||
server: { host: '127.0.0.1' },
|
||||
integrations: [
|
||||
starlight({
|
||||
title: 'RDBMS Playground',
|
||||
tagline: 'Learn relational databases by doing.',
|
||||
// Header logo: a database-table glyph with a teal primary-key cell.
|
||||
// Separate light/dark files so the outline adapts to the theme;
|
||||
// `replacesTitle: false` keeps the "RDBMS Playground" wordmark beside it.
|
||||
logo: {
|
||||
light: './src/assets/relplay-logo-light.svg',
|
||||
dark: './src/assets/relplay-logo-dark.svg',
|
||||
replacesTitle: false,
|
||||
},
|
||||
// Footer override: Starlight's default footer + a small company/source line.
|
||||
components: {
|
||||
Footer: './src/components/Footer.astro',
|
||||
},
|
||||
// TODO(Phase B): a header social link to the repo is deliberately omitted
|
||||
// — the source/issues link lives understated in the footer instead.
|
||||
customCss: ['./src/styles/global.css'],
|
||||
// Open Graph / Twitter social card. Starlight emits og:title/url/type
|
||||
// from `site`, but not an image, so add a single site-wide card.
|
||||
// Source: src/assets/og-card.svg → public/og-card.png (rasterise with
|
||||
// sharp; see the SVG header for the one-liner). Absolute URL required
|
||||
// by scrapers — derived from the `site` origin.
|
||||
head: [
|
||||
{ tag: 'meta', attrs: { property: 'og:image', content: 'https://relplay.org/og-card.png' } },
|
||||
{ tag: 'meta', attrs: { property: 'og:image:width', content: '1200' } },
|
||||
{ tag: 'meta', attrs: { property: 'og:image:height', content: '630' } },
|
||||
{
|
||||
tag: 'meta',
|
||||
attrs: {
|
||||
property: 'og:image:alt',
|
||||
content: 'RDBMS Playground — learn relational databases by doing.',
|
||||
},
|
||||
},
|
||||
{ tag: 'meta', attrs: { name: 'twitter:card', content: 'summary_large_image' } },
|
||||
{ tag: 'meta', attrs: { name: 'twitter:image', content: 'https://relplay.org/og-card.png' } },
|
||||
],
|
||||
// Register the simple-mode command grammar with Expressive Code (Shiki).
|
||||
expressiveCode: { shiki: { langs: [rdbmsLang, rdbmsSyntax] } },
|
||||
// Pragmatic structure (ADR-website-001 §7 / website/STYLE.md): Getting
|
||||
// started, Guides, Reference, Concepts. Autogenerated per directory;
|
||||
// in-section order is controlled by each page's `sidebar.order`
|
||||
// frontmatter.
|
||||
sidebar: [
|
||||
{ label: 'Getting started', items: [{ autogenerate: { directory: 'getting-started' } }] },
|
||||
{ label: 'Using the playground', items: [{ autogenerate: { directory: 'using-the-playground' } }] },
|
||||
{ label: 'Guides', items: [{ autogenerate: { directory: 'guides' } }] },
|
||||
{ label: 'Reference', items: [{ autogenerate: { directory: 'reference' } }] },
|
||||
{ label: 'Concepts', items: [{ autogenerate: { directory: 'concepts' } }] },
|
||||
],
|
||||
}),
|
||||
],
|
||||
|
||||
vite: {
|
||||
plugins: [tailwindcss()],
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,318 @@
|
||||
/**
|
||||
* Cast source definitions — the durable, human-readable source for the
|
||||
* asciinema demos (ADR-website-001 §2). `pnpm casts` runs `generate.mjs`,
|
||||
* which turns each definition into an autocast YAML and records it to
|
||||
* `public/casts/<name>.cast`. Edit these and re-run to re-record as the app
|
||||
* evolves; the `.cast` files are regenerable artifacts.
|
||||
*
|
||||
* Step kinds:
|
||||
* { wait: ms } — pause (shown in the recording)
|
||||
* { type: 'text', after: ms } — type the text + press Enter, then pause
|
||||
* { type: 'text', enter: false } — type without pressing Enter
|
||||
* { key: 'Tab'|'Enter'|'CtrlC'|'CtrlO'|'Esc', after } — press a single named key
|
||||
* { caption: 'text', after: ms } — pop a demo caption (ADR-0047) bottom-right,
|
||||
* then hold it (it clears on the next key)
|
||||
*
|
||||
* Every cast must end by quitting the app so the driver returns to the shell
|
||||
* prompt — use `{ key: 'CtrlC' }` (Ctrl-C → quit), NOT a typed `quit`: Ctrl-C
|
||||
* is invisible, so the trim ends the cast on the last content frame instead of
|
||||
* a dangling `quit`.
|
||||
*/
|
||||
|
||||
/** The shared library narrative, trimmed per cast. */
|
||||
export const casts = [
|
||||
{
|
||||
name: 'schema-sidebar',
|
||||
title: 'Bring up the schema sidebar and step through tables and relationships',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
// A small two-table schema with one relationship, so both sidebar
|
||||
// panels have something to show.
|
||||
{ type: 'create table authors with pk author_id(serial)', after: 650 },
|
||||
{ type: 'add column to authors: name (text)', after: 650 },
|
||||
{ type: 'create table books with pk book_id(serial)', after: 650 },
|
||||
{ type: 'add column to books: title (text)', after: 650 },
|
||||
{ type: 'add column to books: author_id (int)', after: 700 },
|
||||
{
|
||||
type: 'add 1:n relationship as books_author from authors.author_id to books.author_id on delete cascade',
|
||||
after: 1400,
|
||||
},
|
||||
// The sidebar is hidden at 90 cols; Ctrl-O reveals it and focuses the
|
||||
// Tables panel (the [CTRL-O] badge shows the otherwise-invisible key).
|
||||
{ key: 'CtrlO', after: 2600 },
|
||||
// Ctrl-O again moves focus to the Relationships panel.
|
||||
{ key: 'CtrlO', after: 2800 },
|
||||
// Esc leaves navigation mode — the sidebar re-hides.
|
||||
{ key: 'Esc', after: 1300 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'sql-echo',
|
||||
title: 'Run simple-mode commands in advanced mode and watch the SQL they map to',
|
||||
width: 90,
|
||||
// Taller than the other casts (26): the m:n command's echo + the junction
|
||||
// structure it prints are long, and at 26 rows the head of the `Executing
|
||||
// SQL:` echo — the payoff — scrolled off the top. The extra rows all go to
|
||||
// the output pane (the surrounding panels are fixed-height), keeping the
|
||||
// whole echo visible. Stays < 40 so the compact 1-row-input layout holds.
|
||||
height: 34,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
{ type: 'mode advanced', after: 1300 },
|
||||
// Each simple-mode command, run in advanced mode, echoes the equivalent
|
||||
// SQL beneath it (the ADR-0038 teaching echo).
|
||||
{ type: 'create table books with pk', after: 1700 },
|
||||
{ type: 'add column to books: title (text)', after: 1800 },
|
||||
{ type: 'create table tags with pk', after: 1600 },
|
||||
{ type: 'add column to tags: label (text)', after: 1900 },
|
||||
// The crescendo: one m:n command expands to a whole junction table —
|
||||
// split type + Enter so the command reads before the long echo lands.
|
||||
{ type: 'create m:n relationship from books to tags', enter: false, after: 1700 },
|
||||
{ key: 'Enter', after: 3200 },
|
||||
{ caption: 'One command builds an entire junction table.', after: 3200 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'seed',
|
||||
title: 'Fill a table with realistic, ready-to-query data in one command',
|
||||
width: 90,
|
||||
// Two seeds: a people table (`name` → real names, `joined` → recent dates)
|
||||
// and a tickets table mixing a free-text column (`subject`), an
|
||||
// auto-detected `priority` (a built-in low/medium/high set, #34), and a
|
||||
// `status` pinned via `set status in (...)` to show the override clause.
|
||||
height: 28,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
// A people table — seed reads the column names to choose what to make.
|
||||
{ type: 'create table members with pk member_id(serial)', after: 650 },
|
||||
{ type: 'add column to members: name (text)', after: 650 },
|
||||
{ type: 'add column to members: joined (date)', after: 800 },
|
||||
// The payoff: one line, eight believable rows. Split type + Enter so the
|
||||
// command reads before the table lands.
|
||||
{ type: 'seed members 8', enter: false, after: 1500 },
|
||||
{ key: 'Enter', after: 2800 },
|
||||
{ caption: 'One line fills a table with realistic, ready-to-query data.', after: 3000 },
|
||||
// A second table: a free-text column (`subject`), an auto-detected one
|
||||
// (`priority`), and `status` pinned to a value set with `set`.
|
||||
{ type: 'create table tickets with pk ticket_id(serial)', after: 650 },
|
||||
{ type: 'add column to tickets: subject (text)', after: 650 },
|
||||
{ type: 'add column to tickets: status (text)', after: 650 },
|
||||
{ type: 'add column to tickets: priority (text)', after: 800 },
|
||||
// `subject` and `priority` are generated; `status` is pinned to a set.
|
||||
{ type: "seed tickets 8 set status in ('open', 'pending', 'closed')", enter: false, after: 1600 },
|
||||
{ key: 'Enter', after: 2800 },
|
||||
{ caption: 'Generate most columns — and pin one to your own values with set.', after: 3000 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'projects',
|
||||
title: 'Save a project, start fresh, then load it back',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '45ms',
|
||||
dataDir: true, // isolated data root → picker lists only this cast's projects
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
{ type: 'create table books with pk', after: 600 },
|
||||
{ type: 'add column to books: title (text)', after: 700 },
|
||||
{ type: "insert into books (title) values ('A Wizard of Earthsea')", after: 800 },
|
||||
{ type: 'show tables', after: 2000 }, // the project has a "books" table
|
||||
// save-as: type the name, PAUSE so the viewer reads it, then confirm.
|
||||
{ type: 'save as', after: 1100 }, // opens the name prompt
|
||||
{ type: 'library', enter: false, after: 1500 }, // type the name (no Enter yet)
|
||||
{ key: 'Enter', after: 1600 }, // confirm → saved as "library"
|
||||
// new: type it, pause, then run — so "new" registers before it executes.
|
||||
{ type: 'new', enter: false, after: 1100 },
|
||||
{ key: 'Enter', after: 1500 },
|
||||
{ type: 'show tables', after: 2200 }, // fresh project — no tables
|
||||
{ type: 'load', after: 1300 }, // opens the project picker
|
||||
{ type: 'j', enter: false, after: 1100 }, // move the selection to "library"
|
||||
{ key: 'Enter', after: 1800 }, // load it
|
||||
{ type: 'show tables', after: 2200 }, // "books" is back
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'modes',
|
||||
title: 'Simple mode, then advanced — with the SQL the playground runs for you',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
{ type: 'create table books with pk', after: 700 },
|
||||
{ type: 'add column to books: title (text)', after: 800 },
|
||||
{ type: "insert into books (title) values ('A Wizard of Earthsea')", after: 650 },
|
||||
{ type: "insert into books (title) values ('Invisible Cities')", after: 1100 },
|
||||
{ type: 'show data books', after: 1600 }, // simple mode — no SQL echo
|
||||
// Split the mode switch (type → beat → submit) so the short, pivotal
|
||||
// command reads before the screen changes.
|
||||
{ type: 'mode advanced', enter: false, after: 1100 },
|
||||
{ key: 'Enter', after: 1300 },
|
||||
{ type: 'show data books', after: 2400 }, // advanced — shows "Executing SQL: …"
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'undo-redo',
|
||||
title: 'Undo a change — then redo it — each with a confirmation',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
{ type: 'create table books with pk', after: 700 },
|
||||
{ type: 'add column to books: title (text)', after: 800 },
|
||||
{ type: "insert into books (title) values ('A Wizard of Earthsea')", after: 650 },
|
||||
{ type: "insert into books (title) values ('Invisible Cities')", after: 1100 },
|
||||
{ type: 'show data books', after: 1500 }, // two rows
|
||||
// Split the short command from its submit so `undo` reads before the
|
||||
// confirmation modal pops over it.
|
||||
{ type: 'undo', enter: false, after: 1000 },
|
||||
{ key: 'Enter', after: 1300 }, // submit → opens the confirmation modal
|
||||
{ type: 'y', enter: false, after: 1600 }, // Y confirms
|
||||
{ type: 'show data books', after: 1500 }, // one row
|
||||
{ type: 'redo', enter: false, after: 1000 },
|
||||
{ key: 'Enter', after: 1300 },
|
||||
{ type: 'y', enter: false, after: 1600 },
|
||||
{ type: 'show data books', after: 1700 }, // two rows again
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'joins',
|
||||
title: 'Switch to advanced mode and join across tables',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '42ms',
|
||||
steps: [
|
||||
{ wait: 900 },
|
||||
// minimal two-table schema + a few rows to join
|
||||
{ type: 'create table authors with pk author_id(serial)', after: 650 },
|
||||
{ type: 'add column to authors: name (text)', after: 650 },
|
||||
{ type: 'create table books with pk book_id(serial)', after: 650 },
|
||||
{ type: 'add column to books: title (text)', after: 650 },
|
||||
{ type: 'add column to books: author_id (int)', after: 800 },
|
||||
{ type: "insert into authors (name) values ('Ursula K. Le Guin')", after: 600 },
|
||||
{ type: "insert into authors (name) values ('Italo Calvino')", after: 700 },
|
||||
{ type: "insert into books (title, author_id) values ('A Wizard of Earthsea', 1)", after: 600 },
|
||||
{ type: "insert into books (title, author_id) values ('The Left Hand of Darkness', 1)", after: 600 },
|
||||
{ type: "insert into books (title, author_id) values ('Invisible Cities', 2)", after: 900 },
|
||||
// Surface the two source tables before joining them — at 90 cols the
|
||||
// schema sidebar is hidden, so this is how the viewer sees what's there.
|
||||
{ type: 'show data authors', after: 1600 },
|
||||
{ type: 'show data books', after: 1900 },
|
||||
// switch to SQL and join (split the mode switch for a readable beat)
|
||||
{ type: 'mode advanced', enter: false, after: 1100 },
|
||||
{ key: 'Enter', after: 1300 },
|
||||
{
|
||||
type: 'select authors.name, books.title from books join authors on books.author_id = authors.author_id order by authors.name',
|
||||
after: 2600,
|
||||
},
|
||||
{ caption: 'Each book paired with its author, joined across the two tables.', after: 3200 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'relationship-diagram',
|
||||
title: 'Declare a relationship and see it drawn',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 900 },
|
||||
{ type: 'create table authors with pk author_id(serial)', after: 800 },
|
||||
{ type: 'add column to authors: name (text)', after: 900 },
|
||||
{ type: 'create table books with pk book_id(serial)', after: 800 },
|
||||
{ type: 'add column to books: title (text)', after: 700 },
|
||||
{ type: 'add column to books: author_id (int)', after: 1000 },
|
||||
{
|
||||
type: 'add 1:n relationship as books_author from authors.author_id to books.author_id on delete cascade',
|
||||
after: 1400,
|
||||
},
|
||||
// the money shot: the two-table connector diagram
|
||||
{ type: 'show relationship books_author', after: 2600 },
|
||||
{ caption: 'Many books, each pointing at one author.', after: 3200 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'assistive-editor',
|
||||
title: 'The input field helps as you type — completion and a live validity indicator',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '55ms',
|
||||
steps: [
|
||||
{ wait: 1100 },
|
||||
{ type: 'create table books with pk', after: 850 },
|
||||
{ type: 'add column to books: title (text)', after: 1100 },
|
||||
// Completion: type a partial table name, press Tab to complete it.
|
||||
{ type: 'show data bo', enter: false, after: 1100 },
|
||||
{ key: 'Tab', after: 1400 },
|
||||
{ key: 'Enter', after: 1600 },
|
||||
// Validity indicator: a misspelled table flags [ERR] before you submit.
|
||||
{ type: 'show data boook', enter: false, after: 1900 },
|
||||
{ key: 'Enter', after: 1700 },
|
||||
// The corrected command runs cleanly.
|
||||
{ type: 'show data books', after: 1600 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'hint',
|
||||
title: 'Ask for a hint — on the command you are typing, or on the last error',
|
||||
width: 90,
|
||||
// Taller: the tier-3 hint blocks (What / Example / Concept) plus the command
|
||||
// echoes need the room. The live-input hint is opened with Ctrl-G, which in
|
||||
// --demo mode aliases F1 and badges AS [F1] (ADR-0047 Amendment 1) — autocast
|
||||
// can't send F1 (an escape sequence), so this control byte stands in for it.
|
||||
height: 30,
|
||||
typeSpeed: '45ms',
|
||||
steps: [
|
||||
{ wait: 1000 },
|
||||
{ type: 'create table customers with pk id(serial)', after: 850 },
|
||||
// Live-input hint, mid-command (how you'd really use it): you start
|
||||
// `add column`, pause unsure of the exact form, and press F1 (Ctrl-G in
|
||||
// demo mode, badged [F1]) to remind yourself — then finish the command
|
||||
// from the example it shows, without losing what you'd typed.
|
||||
{ type: 'add column ', enter: false, after: 1700 },
|
||||
{ key: 'CtrlG', after: 3400 }, // [F1] badge + the add-column hint — hold to read
|
||||
{ type: 'customers: email (text)', enter: false, after: 1600 }, // finish it off
|
||||
{ key: 'Enter', after: 2000 }, // submit — the column is added
|
||||
// Error-recovery hint: a command that fails, then `hint` explains it.
|
||||
{ type: 'show data orders', after: 2200 }, // no such table → friendly error
|
||||
{ type: 'hint', enter: false, after: 1200 },
|
||||
{ key: 'Enter', after: 3400 }, // the error hint block — hold to read
|
||||
{ caption: 'A hint for what you are typing, or for the last error.', after: 3200 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'quickstart',
|
||||
title: 'RDBMS Playground — first table to first query',
|
||||
width: 90,
|
||||
height: 26,
|
||||
typeSpeed: '45ms',
|
||||
holdEnd: 2.5, // landing cast loops — pause on the final frame before restart
|
||||
steps: [
|
||||
{ wait: 1100 },
|
||||
{ type: 'create table authors with pk', after: 1000 },
|
||||
{ type: 'add column to authors: name (text)', after: 850 },
|
||||
{ type: 'add column to authors: birth_year (int)', after: 900 },
|
||||
{
|
||||
type: "insert into authors (name, birth_year) values ('Ursula K. Le Guin', 1929)",
|
||||
after: 1300,
|
||||
},
|
||||
{ type: 'show data authors', after: 1800 },
|
||||
{ key: 'CtrlC' }, // quit invisibly (Ctrl-C) — cast ends on the last content frame
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,211 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* generate.mjs — turn the cast definitions in `casts.mjs` into asciinema
|
||||
* `.cast` recordings under `public/casts/`, using autocast (ADR-website-001
|
||||
* §2; driver chosen by the 2026-06-10 spike — autocast drives the full-screen
|
||||
* TUI correctly, asciinema-automation does not).
|
||||
*
|
||||
* Usage:
|
||||
* pnpm casts # regenerate every cast
|
||||
* pnpm casts quickstart # regenerate just one
|
||||
*
|
||||
* Requires `autocast` on PATH (cargo install autocast) and a built
|
||||
* `rdbms-playground` binary at ../target/debug (run `cargo build` at the repo
|
||||
* root first). The binary's dir is added to PATH for the autocast child so the
|
||||
* recording shows a clean `$ rdbms-playground` launch line.
|
||||
*/
|
||||
import { spawnSync } from 'node:child_process';
|
||||
import { mkdirSync, writeFileSync, readFileSync, rmSync } from 'node:fs';
|
||||
import { dirname, resolve } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import os from 'node:os';
|
||||
import { casts } from './casts.mjs';
|
||||
|
||||
const here = dirname(fileURLToPath(import.meta.url));
|
||||
const websiteRoot = resolve(here, '..');
|
||||
const repoRoot = resolve(websiteRoot, '..');
|
||||
const binDir = resolve(repoRoot, 'target', 'debug');
|
||||
const outDir = resolve(websiteRoot, 'public', 'casts');
|
||||
const cargoBin = resolve(os.homedir(), '.cargo', 'bin');
|
||||
|
||||
/** YAML-escape a single character for a double-quoted scalar. */
|
||||
function charKey(ch) {
|
||||
if (ch === '\\') return '"\\\\"';
|
||||
if (ch === '"') return '"\\""';
|
||||
return `"${ch}"`;
|
||||
}
|
||||
|
||||
/** Named single keys → autocast control codes. */
|
||||
const NAMED_KEYS = {
|
||||
Enter: '^M',
|
||||
Tab: '^I',
|
||||
// Ctrl-C quits the app (Action::Quit). Used to end a cast *invisibly* — no
|
||||
// `quit` command typed into the input — so the recording ends on the last
|
||||
// content frame rather than a dangling, payoff-less `quit`.
|
||||
CtrlC: '^C',
|
||||
// Ctrl-O cycles the ADR-0046 schema-sidebar navigation focus
|
||||
// (Input → Tables → Relationships → Input); the only way to reveal the
|
||||
// sidebar in a 90-column cast (it auto-hides at that width).
|
||||
CtrlO: '^O',
|
||||
// Esc leaves navigation mode directly (back to the input field).
|
||||
Esc: '^[',
|
||||
// Ctrl-G: in demo mode the app aliases this to F1 (the contextual-hint key,
|
||||
// ADR-0053) and badges it AS [F1] (ADR-0047 Amendment 1). autocast can't emit
|
||||
// F1 (an escape sequence), but it can send this single control byte — so a
|
||||
// cast can show the live-input hint exactly as a real F1 press would.
|
||||
CtrlG: '^G',
|
||||
};
|
||||
|
||||
/** Build the autocast `keys:` list (one entry per line) for a cast's steps. */
|
||||
function keysFor(steps) {
|
||||
const keys = [];
|
||||
for (const step of steps) {
|
||||
if (step.wait != null) {
|
||||
keys.push(`${step.wait}ms`);
|
||||
continue;
|
||||
}
|
||||
if (step.key != null) {
|
||||
const code = NAMED_KEYS[step.key];
|
||||
if (!code) throw new Error(`unknown key: ${step.key}`);
|
||||
// Quote the control code so YAML-special bytes (`^[` ESC, `^]`) stay
|
||||
// valid scalars; `^M`/`^I`/`^C` are unaffected by the quoting.
|
||||
keys.push(JSON.stringify(code));
|
||||
if (step.after != null) keys.push(`${step.after}ms`);
|
||||
continue;
|
||||
}
|
||||
if (step.type != null) {
|
||||
for (const ch of step.type) keys.push(charKey(ch));
|
||||
if (step.enter !== false) keys.push('^M'); // Enter = CR (the TUI submits on \r)
|
||||
if (step.after != null) keys.push(`${step.after}ms`);
|
||||
continue;
|
||||
}
|
||||
if (step.caption != null) {
|
||||
// Demo step caption (ADR-0047 D3): `Ctrl+]` opens a stealth capture
|
||||
// buffer, the characters accumulate invisibly (they don't touch the
|
||||
// input line), and a second `Ctrl+]` commits them to the floating
|
||||
// caption box. The caption persists until the next keystroke, so the
|
||||
// trailing wait holds it on screen before the cast ends. Keep caption
|
||||
// text plain ASCII — it is typed character-by-character like any input.
|
||||
keys.push(JSON.stringify('^]')); // open capture
|
||||
for (const ch of step.caption) keys.push(charKey(ch));
|
||||
keys.push(JSON.stringify('^]')); // commit the caption
|
||||
if (step.after != null) keys.push(`${step.after}ms`);
|
||||
continue;
|
||||
}
|
||||
throw new Error(`unrecognised step: ${JSON.stringify(step)}`);
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trim a recorded cast to just the in-app portion and (optionally) hold the
|
||||
* final frame. The app enters the alternate screen (`?1049h`) right after
|
||||
* launch and leaves it (`?1049l`) on quit, so keeping the events between those
|
||||
* drops the shell prompt, the `$ rdbms-playground` launch line, and the
|
||||
* return-to-shell frame — the cast starts with the app already running and
|
||||
* ends on the last in-app frame (no stray cursor-under-prompt frame).
|
||||
* `holdEnd` re-emits the final frame after a pause so a looping cast lingers
|
||||
* before restarting.
|
||||
*/
|
||||
function trimCast(outPath, { holdEnd = 1.5 } = {}) {
|
||||
const lines = readFileSync(outPath, 'utf8').split('\n').filter(Boolean);
|
||||
const header = JSON.parse(lines[0]);
|
||||
const events = lines.slice(1).map((l) => JSON.parse(l));
|
||||
const isOut = (e) => Array.isArray(e) && e[1] === 'o' && typeof e[2] === 'string';
|
||||
|
||||
const start = events.findIndex((e) => isOut(e) && e[2].includes('?1049h'));
|
||||
let end = -1;
|
||||
for (let i = events.length - 1; i >= 0; i--) {
|
||||
if (isOut(events[i]) && events[i][2].includes('?1049l')) {
|
||||
end = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
const kept = events.slice(start < 0 ? 0 : start, end < 0 ? events.length : end);
|
||||
if (kept.length === 0) return; // nothing matched — leave the cast untouched
|
||||
const t0 = kept[0][0];
|
||||
const rebased = kept.map((e) => [Number((e[0] - t0).toFixed(6)), e[1], e[2]]);
|
||||
if (holdEnd > 0) {
|
||||
const lastT = rebased[rebased.length - 1][0];
|
||||
rebased.push([Number((lastT + holdEnd).toFixed(6)), 'o', '']); // hold final frame
|
||||
}
|
||||
delete header.duration; // let the player recompute from events
|
||||
writeFileSync(
|
||||
outPath,
|
||||
[JSON.stringify(header), ...rebased.map((e) => JSON.stringify(e))].join('\n') + '\n'
|
||||
);
|
||||
}
|
||||
|
||||
function yamlFor(cast, dataDir) {
|
||||
const keys = keysFor(cast.steps)
|
||||
.map((k) => ` - ${k}`)
|
||||
.join('\n');
|
||||
// Build the launch command. `--demo` turns on the demonstration overlay
|
||||
// (ADR-0047): automatic keystroke badges (so otherwise-invisible keys like
|
||||
// `j` / Tab / Enter are shown) plus `Ctrl+]`-delimited step captions.
|
||||
// `--data-dir` isolates the recording from the user's real projects (and
|
||||
// keeps the load picker listing only this cast's projects).
|
||||
const cmd = ['rdbms-playground'];
|
||||
if (cast.demo !== false) cmd.push('--demo'); // on for all casts (opt out with demo:false)
|
||||
if (dataDir) cmd.push('--data-dir', dataDir);
|
||||
return [
|
||||
'settings:',
|
||||
` width: ${cast.width ?? 90}`,
|
||||
` height: ${cast.height ?? 26}`,
|
||||
` title: ${JSON.stringify(cast.title ?? cast.name)}`,
|
||||
` type_speed: ${cast.typeSpeed ?? '45ms'}`,
|
||||
' timeout: 90s',
|
||||
' prompt: "$ "',
|
||||
'instructions:',
|
||||
' - !Interactive',
|
||||
` command: ${cmd.join(' ')}`,
|
||||
' keys:',
|
||||
keys,
|
||||
'',
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
const only = process.argv[2];
|
||||
const selected = only ? casts.filter((c) => c.name === only) : casts;
|
||||
if (only && selected.length === 0) {
|
||||
console.error(`no cast named "${only}". Known: ${casts.map((c) => c.name).join(', ')}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
mkdirSync(outDir, { recursive: true });
|
||||
const env = { ...process.env, PATH: `${binDir}:${cargoBin}:${process.env.PATH}` };
|
||||
|
||||
let failures = 0;
|
||||
for (const cast of selected) {
|
||||
const yamlPath = resolve(os.tmpdir(), `autocast-${cast.name}.yaml`);
|
||||
const outPath = resolve(outDir, `${cast.name}.cast`);
|
||||
// Per-cast isolated data root (so the load picker lists only this cast's
|
||||
// projects and nothing touches the user's real data dir). Wiped fresh each
|
||||
// run for a deterministic picker order.
|
||||
let dataDir = null;
|
||||
if (cast.dataDir) {
|
||||
dataDir = resolve(os.tmpdir(), `rdbms-cast-data-${cast.name}`);
|
||||
rmSync(dataDir, { recursive: true, force: true });
|
||||
mkdirSync(dataDir, { recursive: true });
|
||||
}
|
||||
writeFileSync(yamlPath, yamlFor(cast, dataDir));
|
||||
console.log(`▶ recording ${cast.name} → public/casts/${cast.name}.cast`);
|
||||
const res = spawnSync('autocast', ['--overwrite', yamlPath, outPath], {
|
||||
env,
|
||||
stdio: 'inherit',
|
||||
});
|
||||
rmSync(yamlPath, { force: true });
|
||||
if (res.status !== 0) {
|
||||
console.error(`✗ ${cast.name} failed (autocast exit ${res.status})`);
|
||||
failures += 1;
|
||||
} else {
|
||||
// Trim the shell launch/quit so the cast starts with the app already
|
||||
// running (the default; opt out with `keepShell: true` for casts that
|
||||
// deliberately document the CLI launch).
|
||||
if (!cast.keepShell) trimCast(outPath, { holdEnd: cast.holdEnd ?? 1.5 });
|
||||
console.log(`✓ ${cast.name}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (failures) process.exit(1);
|
||||
console.log(`Done — ${selected.length} cast(s).`);
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "rdbms-playground-website",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"packageManager": "pnpm@10.30.3",
|
||||
"scripts": {
|
||||
"dev": "astro dev",
|
||||
"start": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"casts": "node casts-src/generate.mjs",
|
||||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/starlight": "^0.40.0",
|
||||
"@astrojs/starlight-tailwind": "^5.0.0",
|
||||
"@tailwindcss/vite": "^4.3.0",
|
||||
"asciinema-player": "^3.15.1",
|
||||
"astro": "^6.4.5",
|
||||
"sharp": "^0.34.5",
|
||||
"tailwindcss": "^4.3.0"
|
||||
}
|
||||
}
|
||||
Generated
+4447
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,156 @@
|
||||
{"version":2,"width":90,"height":26,"timestamp":1781556663,"title":"The input field helps as you type — completion and a live validity indicator","env":{"TERM":"tmux-256color","SHELL":"/usr/bin/bash"}}
|
||||
[0,"o","\u001b[?1049h"]
|
||||
[0.00545,"o","\u001b[1;1H\u001b[38;2;74;82;101;48;2;24;27;34m╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Output \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[3;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[4;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[5;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[6;"]
|
||||
[0.00549,"o","1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[7;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[8;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[9;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[10;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[11;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[12;1H│\u001b[38;2;230;230;230;48;2;24;27;34"]
|
||||
[0.005618,"o","m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[13;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[14;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[15;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[16;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[17;1H╰─────────────────────────────────────────────────────────────────────────────"]
|
||||
[0.005685,"o","───────────╯\u001b[18;1H╭ \u001b[1m\u001b[38;2;110;196;255;48;2;24;27;34mSIMPLE\u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m ────────────────────────────────────────────────────────────────────────────────╮\u001b[19;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[20;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[21;1H╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Hint \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────"]
|
||||
[0.005762,"o","────────────────────────────────────────────╮\u001b[22;1H│\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[23;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[24;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[25;1H\u001b[38;2;139;144;154;48;2;24;27;34mProject: \u001b[1m[TEMP] \u001b[38;2;230;230;230;48;2;24;27;34mFjord Watching Amber\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m complete · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m run \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.007557,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.009356,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.011103,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.166282,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcopy\u001b[22;7Hchange\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.221699,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.276898,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.331804,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.387235,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.441796,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.496806,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;110;196;255;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mm:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.551501,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.60719,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.661943,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.716163,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.77186,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.826494,"o","\u001b[19;14H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.881231,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.936764,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.991682,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.046596,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.101893,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.156912,"o","\u001b[19;20H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.211691,"o","\u001b[19;21H\u001b[38;2;255;107;107;48;2;24;27;34mw\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.26689,"o","\u001b[19;22H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.322131,"o","\u001b[19;23H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.376801,"o","\u001b[19;21H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.431598,"o","\u001b[19;25H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.486455,"o","\u001b[19;26H\u001b[38;2;255;107;107;48;2;24;27;34mp\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.541781,"o","\u001b[19;26H\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.597404,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[2;20H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[2;27Htable\u001b[2;33H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[2;39H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[2;44Hpk\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;15H \u001b[19;21H \u001b[19;26H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.616813,"o","\u001b[2;11H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtabl\u001b[2;23H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[2;44H \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks\u001b[4;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌──────┬────────┬─────────────┐\u001b[5;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[5;13HName\u001b[5;18H│\u001b[5;20HType\u001b[5;27H│\u001b[5;29HConstraints\u001b[5;41H│\u001b[6;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├──────┼────────┼─────────────┤\u001b[7;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[7;13Hid\u001b[7;18H│\u001b[7;20Hserial\u001b[7;27H│\u001b[7;29HPK\u001b[7;41H│\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└──────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.620142,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.622856,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.62565,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.557004,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.612094,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.666996,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.72284,"o","\u001b[19;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.777663,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[22;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.832929,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.886986,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.942008,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.997009,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.051757,"o","\u001b[19;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.097648,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.106455,"o","\u001b[19;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.162185,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.21731,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.271996,"o","\u001b[19;13H\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.326836,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;7H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.381632,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.436926,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.491787,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.546623,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.602362,"o","\u001b[19;21H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.656814,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.712212,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.76694,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.823773,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.876612,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.932046,"o","\u001b[19;27H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.987427,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.04228,"o","\u001b[19;29H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.097516,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.152007,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.210388,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mx\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.261688,"o","\u001b[19;30H\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.319214,"o","\u001b[19;34H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.374088,"o","\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[9;20H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[9;24Hcolumn\u001b[9;31Hto\u001b[9;34H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[9;41H\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[9;47H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;6H \u001b[19;13H \u001b[19;16H \u001b[19;23H \u001b[19;29H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.391451,"o","\u001b[9;11H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;47H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks\u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────┬────────┬─────────────┐\u001b[12;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[12;13HName\u001b[12;19H│\u001b[12;21HType\u001b[12;28H│\u001b[12;30HConstraints\u001b[12;42H│\u001b[13;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────┼────────┼─────────────┤\u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[14;13Hid\u001b[14;19H│\u001b[14;21Hserial\u001b[14;28H│\u001b[14;30HPK\u001b[14;42H│\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[15;13Htitle\u001b[15;19H│\u001b[15;21Htext\u001b[15;28H│\u001b[15;42H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.394119,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.396793,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.399387,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.404434,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.582191,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.637491,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.692754,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.748108,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.803054,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.859446,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.87469,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.913278,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.969412,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.022691,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.077968,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.133384,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.187967,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.189074,"o","\u001b[19;85H\u001b[1m\u001b[38;2;255;107;107;48;2;24;27;34m[ERR]\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.397804,"o","\u001b[13;82H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;82H [TAB] \u001b[15;82H \u001b[19;12H\u001b[22m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[19;18H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;85H\u001b[27m \u001b[22;2H\u001b[38;2;199;146;234;48;2;24;27;34mwhere\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mlimit\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.399898,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.900013,"o","\u001b[13;82H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;82H \u001b[15;82H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.90716,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;18H \u001b[2;24H \u001b[2;30H \u001b[2;35H \u001b[3;11H┌──────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├──────┼────────┼─────────────┤\u001b[6;11H│ id │ serial │ PK │\u001b[7;11H└──────┴────────┴─────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[9;22H \u001b[9;25H \u001b[9;32H \u001b[9;38H \u001b[10;11H┌───────┬────────┬─────────────┐\u001b[11;11H│ Name │ Type │ Constraints │\u001b[12;11H├───────┼────────┼─────────────┤\u001b[13;11H│ id │ serial │ PK │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mtitle\u001b[14;21Ht\u001b[14;23Hxt \u001b[14;30H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;"]
|
||||
[9.907212,"o","199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[19;12H \u001b[19;18H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.912015,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└──────┴────────┴─────────────┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[4;18H \u001b[4;20H \u001b[4;27H \u001b[4;29H \u001b[4;41H \u001b[5;11H┌\u001b[5;18H─┬\u001b[5;27H─┬\u001b[5;41H─┐\u001b[6;13HName\u001b[6;18H │ Type \u001b[6;27H │ Constraints │\u001b[7;11H├\u001b[7;18H─┼\u001b[7;27H─┼\u001b[7;41H─┤\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;"]
|
||||
[9.912119,"o","230;230;48;2;24;27;34m│ id │ serial │ PK \u001b[8;38H │ \u001b[9;11H│ title\u001b[9;19H│\u001b[9;21Htext\u001b[9;28H│\u001b[9;42H│\u001b[10;11H└\u001b[10;19H┴\u001b[10;28H┴\u001b[10;42H┘\u001b[11;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[11;21H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;30H \u001b[11;42H \u001b[12;11H┌\u001b[12;19H─\u001b[12;23H┬\u001b[12;28H─\u001b[12;31H┐ \u001b[13;13H \u001b[13;19H id │ title │\u001b[13;42H \u001b[14;11H├───────────┼───────┤\u001b[14;42H \u001b[15;11H│ (no rows) │ │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────┘ \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.915515,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.918395,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.92161,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.924583,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.409477,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.617986,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.672877,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.727786,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.783244,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.83832,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.892818,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.947931,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.002736,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.058516,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.112078,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.1676,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.222679,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.277066,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.332723,"o","\u001b[19;15H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mno such table: `booo`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.387983,"o","\u001b[19;16H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;22H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mk`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.389622,"o","\u001b[19;85H\u001b[1m\u001b[38;2;255;107;107;48;2;24;27;34m[ERR]\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.398062,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[3;22H \u001b[3;25H \u001b[3;32H \u001b[3;38H \u001b[4;11H┌───────┬────────┬─────────────┐\u001b[5;11H│ Name │ Type │ Constraints │\u001b[6;11H├───────┼────────┼─────────────┤\u001b[7;11H│ id │ serial │ PK │\u001b[8;13Htitle\u001b[8;21Ht\u001b[8;23Hxt \u001b[8;30H \u001b[9;11H└───────┴────────┴─────────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────┐\u001b[12;11H│ id │ title │\u001b[13;11H├───────────┼───────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ (no rows) │ │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;"]
|
||||
[14.398203,"o","27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mboook\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;7H \u001b[19;12H \u001b[19;85H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command\u001b[22;17H— press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.404421,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;22H \u001b[2;25H \u001b[2;32H \u001b[2;38H \u001b[3;11H┌───────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├───────┼────────┼─────────────┤\u001b[6;11H│ id │ serial │ PK │\u001b[7;13Htitle\u001b[7;21Ht\u001b[7;23Hxt \u001b[7;30H \u001b[8;11H└───────┴────────┴─────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────┐\u001b[11;11H│ id │ title │\u001b[12;11H├───────────┼───────┤\u001b[13;11H│ (no rows) │ │\u001b[14;11H└───────────┴───────┘\u001b[15;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mboook\u001b[38;2;255;107;107;48;2;24;27;34m ✗\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[16;2H\u001b[38;2;255;107;107;48;2;24;27;34m[error] \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mno such table: `boook`\u001b[22m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.407601,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.410946,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.414123,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.41529,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.900531,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.208351,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.262622,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.317308,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.37317,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.429932,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.483671,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.537446,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.59264,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.64883,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.703736,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.757739,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.813762,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.868223,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.925182,"o","\u001b[19;15H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.977427,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.033358,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m┌───────┬────────┬─────────────┐\u001b[3;11H│ Name │ Type │ Constraints │\u001b[4;11H├───────┼────────┼─────────────┤\u001b[5;11H│ id │ serial │ PK │\u001b[6;13Htitle\u001b[6;21Ht\u001b[6;23Hxt \u001b[6;30H \u001b[7;11H└───────┴────────┴─────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────┐\u001b[10;11H│ id │ title │\u001b[11;11H├───────────┼───────┤\u001b[12;11H│ (no rows) │ │\u001b[13;11H└───────────┴───────┘\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mboook\u001b[38;2;255;107;107;48;2;24;27;34m ✗\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;2H\u001b[22m\u001b[38;2;255;107;107;48;2;24;27;34m[error] \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mno such table: `boook`\u001b[15;80H\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;7H \u001b[19;12H "]
|
||||
[17.033402,"o"," \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.036731,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└\u001b[2;19H┴\u001b[2;28H┴\u001b[2;42H┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[3;21H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[3;30H \u001b[3;42H \u001b[4;11H┌\u001b[4;19H─\u001b[4;23H┬\u001b[4;28H─\u001b[4;31H┐ \u001b[5;13H \u001b[5;19H id │ title │\u001b[5;42H \u001b[6;11H├───────────┼───────┤\u001b[6;42H \u001b[7;11H│ (no rows) │ │ \u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mboook\u001b[38;2;255;107;107;48;2;24;27;34m ✗\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;255;107;107;48;2;24;27;34m[error] \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mno such table: `boook`\u001b[11;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[12;11H┌───────────┬───────┐\u001b[13;11H│ id │ title │\u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────────┼───────┤\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ (no rows) │ │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────┘ \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.039752,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.042846,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.046042,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.051022,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.534164,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.745766,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.245766,"o",""]
|
||||
@@ -0,0 +1,197 @@
|
||||
{"version":2,"width":90,"height":30,"timestamp":1781561938,"title":"Ask for a hint — on the command you are typing, or on the last error","env":{"TERM":"tmux-256color","SHELL":"/usr/bin/bash"}}
|
||||
[0,"o","\u001b[?1049h"]
|
||||
[0.006366,"o","\u001b[1;1H\u001b[38;2;74;82;101;48;2;24;27;34m╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Output \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[3;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[4;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[5;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[6;"]
|
||||
[0.006457,"o","1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[7;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[8;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[9;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[10;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[11;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[12;1H│\u001b[38;2;230;230;230;48;2;24;27;34"]
|
||||
[0.006565,"o","m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[13;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[14;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[15;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[16;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[17;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[18;1H│\u001b[38;2;230;230;230;48;2;24;27;34m "]
|
||||
[0.006668,"o"," \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[19;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[20;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[21;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[22;1H╭ \u001b[1m\u001b[38;2;110;196;255;48;2;24;27;34mSIMPLE\u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m ───────────────────────────────────────────────────────────────────────────────"]
|
||||
[0.006777,"o","─╮\u001b[23;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[24;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[25;1H╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Hint \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────────────────────────────────────────────────╮\u001b[26;1H│\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[27;1H│\u001b[38;2;230;230;230"]
|
||||
[0.006886,"o",";48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[28;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[29;1H\u001b[38;2;139;144;154;48;2;24;27;34mProject: \u001b[1m[TEMP] \u001b[38;2;230;230;230;48;2;24;27;34mLinen Swimming Ancient\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[30;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m complete · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m run \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.00905,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.011189,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.013228,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.051739,"o","\u001b[23;2H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcopy\u001b[26;7Hchange\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[30;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[30;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[30;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[30;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[30;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[30;60Hword · \u001b[30;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.096918,"o","\u001b[23;3H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.141564,"o","\u001b[23;4H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.186895,"o","\u001b[23;5H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.231779,"o","\u001b[23;6H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.2764,"o","\u001b[23;2H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.321129,"o","\u001b[23;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;110;196;255;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mm:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.367057,"o","\u001b[23;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.413184,"o","\u001b[23;10H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.45713,"o","\u001b[23;11H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.504586,"o","\u001b[23;12H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.548843,"o","\u001b[23;9H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.591309,"o","\u001b[23;14H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.637095,"o","\u001b[23;15H\u001b[38;2;86;182;194;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.6818,"o","\u001b[23;16H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.726332,"o","\u001b[23;17H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.77128,"o","\u001b[23;18H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.816275,"o","\u001b[23;19H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.861428,"o","\u001b[23;20H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.906301,"o","\u001b[23;21H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.951521,"o","\u001b[23;22H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.99628,"o","\u001b[23;23H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.041138,"o","\u001b[23;24H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.086225,"o","\u001b[23;25H\u001b[38;2;255;107;107;48;2;24;27;34mw\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.131386,"o","\u001b[23;26H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.176383,"o","\u001b[23;27H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.222191,"o","\u001b[23;25H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.26635,"o","\u001b[23;29H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.311243,"o","\u001b[23;30H\u001b[38;2;255;107;107;48;2;24;27;34mp\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.356409,"o","\u001b[23;30H\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.401462,"o","\u001b[23;32H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.446713,"o","\u001b[23;33H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext: `(`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.491778,"o","\u001b[23;34H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.536094,"o","\u001b[23;35H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.581485,"o","\u001b[23;36H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34ms\u001b[26;4Hrial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.626076,"o","\u001b[23;37H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.671481,"o","\u001b[23;38H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.71661,"o","\u001b[23;39H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.761276,"o","\u001b[23;40H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.806544,"o","\u001b[23;36H\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.851602,"o","\u001b[23;42H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.896968,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[2;20H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[2;27Htable\u001b[2;33H\u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[2;43H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[2;48Hpk\u001b[2;51H\u001b[38;2;86;182;194;48;2;24;27;34mid\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[17;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[18;80H [ENTER] \u001b[19;80H \u001b[23;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[23;9H \u001b[23;15H \u001b[23;25H \u001b[23;30H \u001b[23;33H \u001b[26;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[30;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[30;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[30;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[30;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[30;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[30;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[30;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.91043,"o","\u001b[2;11H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtabl\u001b[2;23H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mid\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mcustomers\u001b[4;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌──────┬────────┬─────────────┐\u001b[5;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[5;13HName\u001b[5;18H│\u001b[5;20HType\u001b[5;27H│\u001b[5;29HConstraints\u001b[5;41H│\u001b[6;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├──────┼────────┼─────────────┤\u001b[7;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[7;13Hid\u001b[7;18H│\u001b[7;20Hserial\u001b[7;27H│\u001b[7;29HPK\u001b[7;41H│\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└──────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.913061,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.915516,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.918019,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.837282,"o","\u001b[23;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[30;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[30;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[30;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[30;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[30;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[30;60Hword · \u001b[30;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.882074,"o","\u001b[23;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.926974,"o","\u001b[23;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.971584,"o","\u001b[23;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.017099,"o","\u001b[23;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[26;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.061621,"o","\u001b[23;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.106191,"o","\u001b[23;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.151892,"o","\u001b[23;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.197451,"o","\u001b[23;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.244466,"o","\u001b[23;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.286707,"o","\u001b[23;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.397871,"o","\u001b[17;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[18;80H \u001b[19;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.288251,"o","\u001b[23;85H\u001b[1m\u001b[38;2;255;107;107;48;2;24;27;34m[ERR]\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.076755,"o","\u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mHint\u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[10;13H\u001b[38;2;230;230;230;48;2;24;27;34mWhat:\u001b[10;22HAdd\u001b[10;26Ha\u001b[10;28Hnew\u001b[10;32Hcolumn\u001b[10;39Hto\u001b[10;42Han\u001b[10;45Hexisting\u001b[10;54Htable.\u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[11;13H\u001b[38;2;230;230;230;48;2;24;27;34mExample:\u001b[11;22Hadd\u001b[11;26Hcolumn\u001b[11;33HCustomers:\u001b[11;44Hphone\u001b[11;50H(text)\u001b[12;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;139;144;154;48;2;24;27;34m Concept: Existing rows take the column's default, or null. A `not null`\u001b[13;2Hcolumn with no default can't be added to a table that already has rows — there'd be\u001b[14;2Hnothing to put in them.\u001b[17;83H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[18;83H [F1] \u001b[19;83H \u001b[23;85H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.079109,"o","\u001b[23;85H\u001b[1m\u001b[38;2;255;107;107;48;2;24;27;34m[ERR]\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.578071,"o","\u001b[17;83H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[18;83H \u001b[19;83H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.567162,"o","\u001b[23;13H\u001b[38;2;86;182;194;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;85H\u001b[27m \u001b[26;11H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.612924,"o","\u001b[23;14H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.657348,"o","\u001b[23;15H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.70209,"o","\u001b[23;16H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.747484,"o","\u001b[23;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.795366,"o","\u001b[23;18H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.837047,"o","\u001b[23;19H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.882022,"o","\u001b[23;20H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.926739,"o","\u001b[23;21H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.972186,"o","\u001b[23;22H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.018065,"o","\u001b[23;23H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.062117,"o","\u001b[23;24H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.107576,"o","\u001b[23;25H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.152532,"o","\u001b[23;26H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.197623,"o","\u001b[23;27H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.242451,"o","\u001b[23;28H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.286656,"o","\u001b[23;29H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.332539,"o","\u001b[23;30H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.377545,"o","\u001b[23;31H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.422378,"o","\u001b[23;32H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.466676,"o","\u001b[23;33H\u001b[38;2;86;182;194;48;2;24;27;34mx\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.512389,"o","\u001b[23;31H\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.557171,"o","\u001b[23;35H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.559402,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.247521,"o","\u001b[15;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[15;20H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[15;24Hcolumn\u001b[15;31H\u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[15;42H\u001b[38;2;86;182;194;48;2;24;27;34memail\u001b[15;48H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[17;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[18;80H [ENTER] \u001b[19;80H \u001b[23;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[23;6H \u001b[23;13H \u001b[23;24H \u001b[23;30H \u001b[26;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[30;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[30;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[30;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[30;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[30;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[30;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[30;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.264085,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌──────┬────────┬─────────────┐ \u001b[3;11H│ Name │ Type\u001b[3;27H│\u001b[3;29HConstraints\u001b[3;41H│\u001b[4;11H├\u001b[4;18H┼\u001b[4;27H┼\u001b[4;41H┤\u001b[5;13Hid \u001b[5;20Hserial\u001b[5;29HPK \u001b[6;11H└\u001b[6;18H┴\u001b[6;27H┴\u001b[6;41H┘\u001b[7;11HHint\u001b[7;18H \u001b[7;20H \u001b[7;27H \u001b[7;29H \u001b[7;41H \u001b[8;11H What: Add a new column to an\u001b[8;45Hexisting\u001b[8;54Htable.\u001b[9;11H Example:\u001b[9;22Hadd\u001b[9;26Hcolumn\u001b[9;33HCustomers:\u001b[9;44Hphone\u001b[9;50H(text)\u001b[10;11H\u001b[38;2;139;144;154;48;2;24;27;34m Concept: Existing rows take the column's default, or null. A `not null`\u001b[11;2Hcolumn with no default can't be added to a table that already has rows — there'd be\u001b[12;2Hnothing to\u001b[12;13Hput in them.\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[13;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34memail\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mcustomers \u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────┬────────┬─────────────┐ \u001b[15;48H \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[16;13HName\u001b[16;19H│\u001b[16;21HType\u001b[16;28H│\u001b[16;30HConstraints\u001b[16;42H│\u001b[17;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├────"]
|
||||
[12.26415,"o","───┼────────┼─────────────┤\u001b[18;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[18;13Hid\u001b[18;19H│\u001b[18;21Hserial\u001b[18;28H│\u001b[18;30HPK\u001b[18;42H│\u001b[19;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[19;13Hemail\u001b[19;19H│\u001b[19;21Htext\u001b[19;28H│\u001b[19;42H│\u001b[20;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.266774,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.269541,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.272085,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.273451,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.752714,"o","\u001b[17;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[18;80H \u001b[19;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.337739,"o","\u001b[23;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[26;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[30;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[30;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[30;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[30;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[30;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[30;60Hword · \u001b[30;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.382757,"o","\u001b[23;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.427483,"o","\u001b[23;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.472538,"o","\u001b[23;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.517298,"o","\u001b[23;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.56253,"o","\u001b[23;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.607371,"o","\u001b[23;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.652525,"o","\u001b[23;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.69759,"o","\u001b[23;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.74233,"o","\u001b[23;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[26;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.787376,"o","\u001b[23;12H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mno such table: `o`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.832805,"o","\u001b[23;13H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;19H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mr`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.878475,"o","\u001b[23;14H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;20H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34md`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.922189,"o","\u001b[23;15H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;21H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34me`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.967745,"o","\u001b[23;16H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;22H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mr`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.012592,"o","\u001b[23;17H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;23H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34ms`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.058302,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m│ Name │ Type │ Constraints │\u001b[3;11H├──────┼────────┼─────────────┤\u001b[4;11H│ id │ serial │ PK │\u001b[5;11H└──────┴────────┴─────────────┘\u001b[6;11HHint \u001b[7;11H What:\u001b[7;22HAdd\u001b[7;26Ha\u001b[7;28Hnew\u001b[7;32Hcolumn\u001b[7;39Hto\u001b[7;42Han\u001b[7;45Hexisting\u001b[7;54Htable.\u001b[8;13HEx\u001b[8;16Hmple:\u001b[8;22Ha\u001b[8;26Hcolumn Customers: phone (tex\u001b[8;55H) \u001b[9;11H\u001b[38;2;139;144;154;48;2;24;27;34m Concept: Existing rows take the column's default, or null. A `not null`\u001b[10;2Hcolumn with no default can't\u001b[10;31Hbe added to a\u001b[10;45Htable that already has rows — there'd be\u001b[11;2Hn\u001b[11;4Hthi\u001b[11;8Hg to put\u001b[11;17Hin them.\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[12;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[12;33H\u001b[38;2;86;182;194;48;2;24;27;34memail\u001b[12;39H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[13;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mcustomers \u001b[13;22H \u001b[13;33H \u001b[13;39H \u001b[14;11H┌───────┬────────┬─────────────┐\u001b[15;11H│ Name │ Type │ Constraints │\u001b[16;11H├───────┼────────┼─────────────┤\u001b[17;11H│ id │ serial │ PK │\u001b[17;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[18;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34memail\u001b[18;21Ht\u001b[18;23Hxt \u001b[18;30H \u001b[18;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[19;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴"]
|
||||
[15.058348,"o","─────────────┘\u001b[19;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[20;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34morders\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H\u001b[7m \u001b[27m \u001b[23;7H \u001b[23;12H \u001b[26;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command\u001b[26;17H— pr\u001b[26;22Hs\u001b[26;24H Tab for options, `help` for a list · `mode advanced` for SQL\u001b[30;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[30;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[30;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[30;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[30;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[30;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[30;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.064122,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m├──────┼────────┼─────────────┤\u001b[3;11H│ id │ serial │ PK │\u001b[4;11H└──────┴────────┴─────────────┘\u001b[5;11HHint \u001b[6;11H What:\u001b[6;22HAdd\u001b[6;26Ha\u001b[6;28Hnew\u001b[6;32Hcolumn\u001b[6;39Hto\u001b[6;42Han\u001b[6;45Hexisting\u001b[6;54Htable.\u001b[7;13HEx\u001b[7;16Hmple:\u001b[7;22Ha\u001b[7;26Hcolumn Customers: phone (tex\u001b[7;55H) \u001b[8;11H\u001b[38;2;139;144;154;48;2;24;27;34m Concept: Existing rows take the column's default, or null. A `not null`\u001b[9;2Hcolumn with no default can't\u001b[9;31Hbe added to a\u001b[9;45Htable that already has rows — there'd be\u001b[10;2Hn\u001b[10;4Hthi\u001b[10;8Hg to put\u001b[10;17Hin them.\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[11;33H\u001b[38;2;86;182;194;48;2;24;27;34memail\u001b[11;39H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[12;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mcustomers \u001b[12;22H \u001b[12;33H \u001b[12;39H \u001b[13;11H┌───────┬────────┬─────────────┐\u001b[14;11H│ Name │ Type │ Constraints │\u001b[15;11H├───────┼────────┼─────────────┤\u001b[16;11H│ id │ serial │ PK │\u001b[17;13Hemail\u001b[17;21Ht\u001b[17;23Hxt \u001b[17;30H \u001b[18;11H└───────┴────────┴─────────────┘\u001b[19;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34morders\u001b[38;2;255;107;107;48;2;24;27;34m ✗\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[20;2H\u001b[38;2;255;107;107;48;2;24;27;34m[error] \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mno such table: `orders`\u001b[22m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.06786,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.071148,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.074906,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.076954,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.559005,"o","\u001b[17;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[18;80H \u001b[19;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.348069,"o","\u001b[23;2H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhelp\u001b[26;7Hhint\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[30;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[30;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[30;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[30;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[30;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[30;60Hword · \u001b[30;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.392956,"o","\u001b[23;3H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.437778,"o","\u001b[23;4H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.483342,"o","\u001b[23;2H\u001b[38;2;199;146;234;48;2;24;27;34mhint\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.483978,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.7725,"o","\u001b[2;11H\u001b[38;2;139;144;154;48;2;24;27;34m Concept: Existing rows take the column's default, or null. A `not null`\u001b[3;2Hcolumn with no default can't be added to a table that already has rows — there'd be\u001b[4;2Hnothing to put in them.\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[5;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[5;22H\u001b[38;2;86;182;194;48;2;24;27;34mcustomers\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[5;33H\u001b[38;2;86;182;194;48;2;24;27;34memail\u001b[5;39H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[6;11H\u001b[38;2;230;230;230;48;2;24;27;34mcustomers\u001b[6;22H \u001b[6;26H \u001b[6;28H \u001b[6;32H \u001b[6;39H \u001b[6;42H \u001b[6;45H \u001b[6;54H \u001b[7;11H┌───────┬────────┬─────────────┐\u001b[7;44H \u001b[7;50H \u001b[8;11H│ Name │ Type │ Constraints │ \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────┼────────┼─────────────┤ \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ id │ serial\u001b[10;28H│\u001b[10;30HPK\u001b[10;42H│\u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ email │ text │ \u001b[11;33H \u001b[11;39H │ \u001b[12;11H└───────┴────────┴─────────────┘\u001b[13;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34morders\u001b[38;2;255;107;107;48;2;24;27;34m ✗\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;2H\u001b[38;2;255;107;107;48;2;24;27;34m[error] \u001b[1m\u001b[38;2;230;230;"]
|
||||
[18.772589,"o","230;48;2;24;27;34mno such table: `orders`\u001b[22m \u001b[14;42H \u001b[15;11HHint \u001b[16;11H \u001b[16;13HWhat:\u001b[16;19H \u001b[16;21H You named a\u001b[16;34Htable\u001b[16;40Hor column\u001b[16;50Hthat\u001b[16;55Hdoesn't\u001b[16;63Hexist.\u001b[17;11H \u001b[17;13HEx\u001b[17;16Hmple: Check\u001b[17;28Hthe\u001b[17;32Hspelling,\u001b[17;42Hor\u001b[17;45Hrun\u001b[17;49H`show\u001b[17;55Htables`\u001b[17;63H(or\u001b[17;67H`show\u001b[17;73Htable\u001b[17;79H<\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mo\u001b[18;2Hsee what's there. \u001b[18;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[19;2H\u001b[22m\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;139;144;154;48;2;24;27;34m Concept: A command can only refer to tables and columns that alread\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[20;2H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcreate them first if you need them.\u001b[23;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[26;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[26;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[30;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[30;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[30;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[30;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[30;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[30;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[30;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[30;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.775075,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.274535,"o","\u001b[17;80H\u001b[38;2;230;230;230;48;2;24;27;34mname>`) t\u001b[18;80H \u001b[19;80H\u001b[38;2;139;144;154;48;2;24;27;34my exist —\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.262177,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.307342,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.353555,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.398541,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.443447,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.486983,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.532753,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.578197,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.622712,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.667217,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.712826,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.758024,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.803668,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.84874,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.892165,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.938347,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.984501,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.027524,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.072281,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.118233,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.16295,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.208885,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.252326,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.297626,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.341754,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.386981,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.432576,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.47771,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.522605,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.567801,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.612588,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.657434,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.702655,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.74768,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.793614,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.83706,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.882331,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.927578,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.97255,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.016625,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.062736,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.10741,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.152879,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.200321,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.245518,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.288124,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.332842,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.378524,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.42321,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.467928,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.514141,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.557755,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.602091,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.647909,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.692837,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.738714,"o","\u001b[16;49H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[17;49H A hint for what you are typing, or for \u001b[18;49H the last error. \u001b[19;49H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.740353,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.029449,"o","\u001b[16;49H\u001b[38;2;230;230;230;48;2;24;27;34m that doesn't exist. \u001b[17;49H`show tables` (or `show table <name>`) t\u001b[18;49H \u001b[19;49H\u001b[38;2;139;144;154;48;2;24;27;34m tables and columns that already exist —\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.529449,"o",""]
|
||||
@@ -0,0 +1,864 @@
|
||||
{"version":2,"width":90,"height":26,"timestamp":1781556614,"title":"Switch to advanced mode and join across tables","env":{"SHELL":"/usr/bin/bash","TERM":"tmux-256color"}}
|
||||
[0,"o","\u001b[?1049h"]
|
||||
[0.005853,"o","\u001b[1;1H\u001b[38;2;74;82;101;48;2;24;27;34m╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Output \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[3;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[4;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[5;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[6;"]
|
||||
[0.006024,"o","1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[7;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[8;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[9;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[10;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[11;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[12;1H│\u001b[38;2;230;230;230;48;2;24;27;34"]
|
||||
[0.006084,"o","m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[13;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[14;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[15;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[16;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[17;1H╰─────────────────────────────────────────────────────────────────────────────"]
|
||||
[0.006129,"o","───────────╯\u001b[18;1H╭ \u001b[1m\u001b[38;2;110;196;255;48;2;24;27;34mSIMPLE\u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m ────────────────────────────────────────────────────────────────────────────────╮\u001b[19;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[20;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[21;1H╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Hint \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────"]
|
||||
[0.006231,"o","────────────────────────────────────────────╮\u001b[22;1H│\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[23;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[24;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[25;1H\u001b[38;2;139;144;154;48;2;24;27;34mProject: \u001b[1m[TEMP] \u001b[38;2;230;230;230;48;2;24;27;34mTrekking Emerald Delta\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m complete · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m run \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.008016,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.00962,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.011219,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.919403,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcopy\u001b[22;7Hchange\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.959885,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.004989,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.043768,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.085716,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.128469,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.169198,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;110;196;255;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mm:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.211201,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.253424,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.29534,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.338295,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.379125,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.421122,"o","\u001b[19;14H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.462875,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.505046,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.547206,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.589372,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.630973,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.673648,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.714806,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.757105,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.799736,"o","\u001b[19;23H\u001b[38;2;255;107;107;48;2;24;27;34mw\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.841594,"o","\u001b[19;24H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.883831,"o","\u001b[19;25H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.927391,"o","\u001b[19;23H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.968662,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.009053,"o","\u001b[19;28H\u001b[38;2;255;107;107;48;2;24;27;34mp\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.05111,"o","\u001b[19;28H\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.094555,"o","\u001b[19;30H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.135189,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext: `(`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.176996,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.21944,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.261708,"o","\u001b[19;34H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.303051,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.345187,"o","\u001b[19;36H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.386803,"o","\u001b[19;37H\u001b[38;2;86;182;194;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.430863,"o","\u001b[19;38H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.471081,"o","\u001b[19;39H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.512924,"o","\u001b[19;40H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.555048,"o","\u001b[19;41H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34ms\u001b[22;4Hrial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.597408,"o","\u001b[19;42H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.638978,"o","\u001b[19;43H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.682783,"o","\u001b[19;44H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.723408,"o","\u001b[19;45H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.765571,"o","\u001b[19;41H\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.807172,"o","\u001b[19;47H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.849259,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[2;20H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[2;27Htable\u001b[2;33H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[2;41H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[2;46Hpk\u001b[2;49H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;15H \u001b[19;23H \u001b[19;28H \u001b[19;31H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;"]
|
||||
[2.849277,"o","2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.871935,"o","\u001b[2;11H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtabl\u001b[2;23H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mauthors\u001b[4;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬────────┬─────────────┐\u001b[5;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[5;13HName\u001b[5;23H│\u001b[5;25HType\u001b[5;32H│\u001b[5;34HConstraints\u001b[5;46H"]
|
||||
[2.875116,"o","│\u001b[6;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────────┼────────┼─────────────┤\u001b[7;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[7;13Hauthor_id\u001b[7;23H│\u001b[7;25Hserial\u001b[7;32H│\u001b[7;34HPK\u001b[7;46H│\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.877514,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.879515,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.881635,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.584478,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.626178,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.67083,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.710354,"o","\u001b[19;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.752461,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[22;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.796575,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.836214,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.879796,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.923316,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.964464,"o","\u001b[19;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.003596,"o","\u001b[19;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.045833,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.087576,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.133005,"o","\u001b[19;13H\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.172335,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.213278,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.256237,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.297076,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.339417,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.352856,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.383358,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.423809,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.46523,"o","\u001b[19;23H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.508366,"o","\u001b[19;24H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.55091,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.591478,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.635388,"o","\u001b[19;27H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.675876,"o","\u001b[19;28H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.71835,"o","\u001b[19;29H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.760004,"o","\u001b[19;30H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.801467,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.846353,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.886125,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34mx\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.928219,"o","\u001b[19;31H\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.96922,"o","\u001b[19;35H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.013831,"o","\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[9;20H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[9;24Hcolumn\u001b[9;31Hto\u001b[9;34H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[9;43H\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[9;48H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;6H \u001b[19;13H \u001b[19;16H \u001b[19;25H \u001b[19;30H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.033141,"o","\u001b[9;11H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[9;34H\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;48H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mauthors\u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬────────┬─────────────┐\u001b[12;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[12;13HName\u001b[12;23H│\u001b[12;25HType\u001b[12;32H│\u001b[12;34HConstraints\u001b[12;46H│\u001b[13;2H\u001b[38;2;159;216;145;"]
|
||||
[5.033214,"o","48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────────┼────────┼─────────────┤\u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[14;13Hauthor_id\u001b[14;23H│\u001b[14;25Hserial\u001b[14;32H│\u001b[14;34HPK\u001b[14;46H│\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[15;13Hname\u001b[15;23H│\u001b[15;25Htext\u001b[15;32H│\u001b[15;46H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.036866,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.039628,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.042553,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.748266,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcopy\u001b[22;7Hchange\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.789005,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.829856,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.871742,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.913922,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.95801,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.99808,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;110;196;255;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mm:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.039813,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.081464,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.125224,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.166712,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.208204,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.250284,"o","\u001b[19;14H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.294247,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.337025,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.377711,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.417971,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.461456,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.501302,"o","\u001b[19;20H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.515108,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.544915,"o","\u001b[19;21H\u001b[38;2;255;107;107;48;2;24;27;34mw\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.588466,"o","\u001b[19;22H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.629414,"o","\u001b[19;23H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.669876,"o","\u001b[19;21H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.711696,"o","\u001b[19;25H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.757238,"o","\u001b[19;26H\u001b[38;2;255;107;107;48;2;24;27;34mp\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.795627,"o","\u001b[19;26H\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.838349,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.8827,"o","\u001b[19;29H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext: `(`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.923167,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.964446,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.00835,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.047662,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.090126,"o","\u001b[19;34H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.132396,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.17344,"o","\u001b[19;36H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.218639,"o","\u001b[19;37H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34ms\u001b[22;4Hrial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.2604,"o","\u001b[19;38H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.300387,"o","\u001b[19;39H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.341684,"o","\u001b[19;40H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.384968,"o","\u001b[19;41H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.426568,"o","\u001b[19;37H\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.467726,"o","\u001b[19;43H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.510816,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mauthors \u001b[2;24H \u001b[2;32H \u001b[2;37H \u001b[2;40H \u001b[3;11H┌───────────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├───────────┼────────┼─────────────┤\u001b[6;11H│ author_id │ serial │ PK │\u001b[7;11H└───────────┴────────┴─────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mauthors \u001b[9;22H \u001b[9;25H \u001b[9;34H \u001b[9;39H \u001b[10;11H┌───────────┬────────┬─────────────┐\u001b[11;11H│ Name │ Type │ Constraints │\u001b[12;11H├───────────┼────────┼─────────────┤\u001b[13;11H│ author_id │ serial │ PK │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mname \u001b[14;25Ht\u001b[14;27Hxt \u001b[14;34H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;15H \u001b[19;21H \u001b[19;26H \u001b[19;29H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.536973,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[2;22Hto\u001b[2;25H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[2;34H\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[2;39H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;11H\u001b[38;2;230;230;230;48;2;24;27;34mauthors \u001b[4;11H┌───────────┬────────┬─────────────┐\u001b[5;11H│ Name │ Type │ Constraints │\u001b[6;11H├───────────┼────────┼─────────────┤\u001b[7;11H│ author_id │ serial │ PK │\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ name \u001b[8;22H │\u001b[8;25Htext │\u001b[8;34H \u001b[8;39H │\u001b[9;11H└──────"]
|
||||
[7.537163,"o","─────┴────────┴─────────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[11;23H \u001b[11;25H \u001b[11;32H \u001b[11;34H \u001b[11;46H \u001b[12;11H┌\u001b[12;21H┬\u001b[12;23H─\u001b[12;30H┬\u001b[12;32H─\u001b[12;44H┐ \u001b[13;13HName │\u001b[13;23HTyp\u001b[13;27H │\u001b[13;32HConstraints\u001b[13;44H│\u001b[13;46H \u001b[14;11H├─────────┼────────┼─────────────┤\u001b[14;46H \u001b[15;11H│ book_id │ serial │ PK │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴────────┴─────────────┘ \u001b[16;47H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.540014,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.542843,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.545908,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.247917,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.293027,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.329757,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.373072,"o","\u001b[19;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.412461,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[22;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.456009,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.495665,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.540017,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.579915,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.622262,"o","\u001b[19;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.667004,"o","\u001b[19;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.705678,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.747691,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.790315,"o","\u001b[19;13H\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.833162,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.880367,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.917124,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.961039,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.002036,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.011279,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.042849,"o","\u001b[19;21H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.085436,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.1286,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.171604,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.212452,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.25503,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.293818,"o","\u001b[19;27H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.33642,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.383524,"o","\u001b[19;29H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.424998,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.464744,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.507999,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mx\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.547517,"o","\u001b[19;30H\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.591426,"o","\u001b[19;34H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.633094,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mauthors \u001b[2;22H \u001b[2;25H \u001b[2;34H \u001b[2;39H \u001b[3;11H┌───────────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├───────────┼────────┼─────────────┤\u001b[6;11H│ author_id │ serial │ PK │\u001b[7;13Hname \u001b[7;25Ht\u001b[7;27Hxt \u001b[7;34H \u001b[8;11H└───────────┴────────┴─────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;"]
|
||||
[9.633143,"o","2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[10;18H \u001b[10;24H \u001b[10;30H \u001b[10;35H \u001b[10;38H \u001b[11;11H┌─────────┬────────┬─────────────┐\u001b[12;11H│ Name │ Type │ Constraints │\u001b[13;11H├─────────┼────────┼─────────────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ book_id │ serial │ PK │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;"]
|
||||
[9.633209,"o","2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[16;47H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;6H \u001b[19;13H \u001b[19;16H \u001b[19;23H \u001b[19;29H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.657328,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[2;24H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[2;30H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[2;35Hpk\u001b[2;38H\u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;11H\u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[4;11H┌─────────┬────────┬─────────────┐\u001b[4;46H \u001b[5;11H│ Name │ Type │ Constraints │ \u001b[6;11H├─────────┼────────┼─────────────┤\u001b[6;46H \u001b[7;13Hbook_id\u001b[7;21H│\u001b[7;23Hserial\u001b[7;30H│\u001b[7;32HPK\u001b[7;44H│\u001b[7;46H \u001b[8;21H┴\u001b[8;23H─\u001b[8;30H┴\u001b[8;32H─\u001b[8;44H┘ \u001b[9;11H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146"]
|
||||
[9.657358,"o",";234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[9;27Hoks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[9;38H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[15;11H│ title │ text │ │\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴────────┴─────────────┘ \u001b[16;47H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.66404,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.666014,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.364063,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.406097,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.450498,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.490476,"o","\u001b[19;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.53624,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[22;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.575016,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.616291,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.66095,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.700149,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.745004,"o","\u001b[19;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.786893,"o","\u001b[19;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.827034,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.868227,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.909715,"o","\u001b[19;13H\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.954974,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.000002,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.037348,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.080998,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.120914,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.136463,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.164123,"o","\u001b[19;21H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.205036,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.246551,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.288932,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.33129,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.372498,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.415685,"o","\u001b[19;27H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.456347,"o","\u001b[19;28H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.498876,"o","\u001b[19;29H\u001b[38;2;86;182;194;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.540544,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.583488,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.625351,"o","\u001b[19;32H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.666944,"o","\u001b[19;33H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.71181,"o","\u001b[19;34H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.75126,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.794939,"o","\u001b[19;34H\u001b[38;2;240;143;192;48;2;24;27;34mint\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.83865,"o","\u001b[19;37H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mno\u001b[22;5H\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.878475,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;18H \u001b[2;24H \u001b[2;30H \u001b[2;35H \u001b[2;38H \u001b[3;11H┌─────────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├─────────┼────────┼─────────────┤\u001b[6;11H│ book_id │ serial │ PK │\u001b[7;11H└─────────┴────────┴─────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[9;22H \u001b[9;25H \u001b[9;32H \u001b[9;38H \u001b[10;11H┌─────────┬────────┬─────────────┐\u001b[11;11H│ Name │ Type │ Constraints │\u001b[12;11H├─────────┼────────┼─────────────┤\u001b[13;11H│ book_id │ serial │ PK │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mtitle \u001b[14;23Ht\u001b[14;25Hxt \u001b[14;32H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[16;51H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;6H \u001b[19;13H \u001b[19;16H \u001b[19;23H \u001b[19;33H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.907376,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m┌─────────┬────────┬─────────────┐\u001b[3;11H│ Name │ Type │ Constraints │\u001b[4;11H├─────────┼────────┼─────────────┤\u001b[5;11H│ book_id │ serial │ PK │\u001b[6;13Htitle \u001b[6;23Ht\u001b[6;25Hxt \u001b[6;32H \u001b[8;32H\u001b[38;2;86;182;194;48;2;24;27;34mau\u001b[8;35Hhor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;21H\u001b[38;2;230;230;230;48;2;24;27;34m─\u001b[10;23H┬\u001b[10;30H─\u001b[10;32H┬\u001b[10;44H──┐\u001b[11;21H \u001b[11;23H│ Type\u001b[11;30H \u001b[11;32H│ Constraints\u001b[11;46H│\u001b[12;21H─\u001b[12;23H┼\u001b[12;30H─\u001b[12;32H┼\u001b[12;44H──┤\u001b[13;21H \u001b[13;23H│ serial\u001b[13;32H│ PK\u001b[13;44H \u001b[13;46H│\u001b[14;21H \u001b[14;23H│ text\u001b[14;30H \u001b[14;32H│\u001b[14;44H \u001b[14;46H│\u001b[15;11H│ author_id │ int │ \u001b[15;46"]
|
||||
[11.907445,"o","H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴────────┴─────────────┘ \u001b[16;51H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.911153,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.915258,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.918564,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.762469,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.803385,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.845494,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.887287,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.933091,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.972755,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.017031,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.055246,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.09666,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.141324,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.180853,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.222541,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.264642,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.307201,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.349383,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.38059,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.392169,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.432722,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.475335,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.519445,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.558349,"o","\u001b[19;21H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.600903,"o","\u001b[19;22H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.647066,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.68652,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.726522,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.768585,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.810719,"o","\u001b[19;27H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.853146,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.895129,"o","\u001b[19;29H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.938471,"o","\u001b[19;30H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.979336,"o","\u001b[19;31H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.022028,"o","\u001b[19;32H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.063889,"o","\u001b[19;33H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.105247,"o","\u001b[19;29H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.147427,"o","\u001b[19;35H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.189503,"o","\u001b[19;36H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `name`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.231788,"o","\u001b[19;37H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.273926,"o","\u001b[19;38H\u001b[38;2;255;107;107;48;2;24;27;34mU\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into\u001b[22;21Ha\u001b[22;23Hthors (name) values (`, expected string literal or `null` —\u001b[23;2Husage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.315974,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.357683,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.400219,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.441482,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.48398,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.525814,"o","\u001b[19;44H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `name`: Type a\u001b[22;21Hq\u001b[22;23Hoted string (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.568129,"o","\u001b[19;45H\u001b[38;2;255;107;107;48;2;24;27;34mK\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into\u001b[22;21Ha\u001b[22;23Hthors (name) values (`, expected string literal or `null` —\u001b[23;2Husage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.609871,"o","\u001b[19;46H\u001b[38;2;255;107;107;48;2;24;27;34m.\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `name`: Type a\u001b[22;21Hq\u001b[22;23Hoted string (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.651714,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.694196,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34mL\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into\u001b[22;21Ha\u001b[22;23Hthors (name) values (`, expected string literal or `null` —\u001b[23;2Husage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.736396,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.778972,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `name`: Type a\u001b[22;21Hq\u001b[22;23Hoted string (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.821179,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34mG\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into\u001b[22;21Ha\u001b[22;23Hthors (name) values (`, expected string literal or `null` —\u001b[23;2Husage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.8622,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.904525,"o","\u001b[19;53H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.946494,"o","\u001b[19;54H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.988862,"o","\u001b[19;37H\u001b[38;2;195;232;141;48;2;24;27;34m'Ursula K. Le Guin'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.029491,"o","\u001b[19;56H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.073342,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m│ Name │ Type │ Constraints │\u001b[3;11H├─────────┼────────┼─────────────┤\u001b[4;11H│ book_id │ serial │ PK │\u001b[5;13Htitle \u001b[5;23Ht\u001b[5;25Hxt \u001b[5;32H \u001b[6;11H└─────────┴────────┴─────────────┘\u001b[7;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[8;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbook"]
|
||||
[15.073438,"o","s \u001b[8;22H \u001b[8;25H \u001b[8;32H \u001b[8;42H \u001b[9;11H┌───────────┬────────┬─────────────┐\u001b[10;11H│ Name │ Type │ Constraints │\u001b[11;11H├───────────┼────────┼─────────────┤\u001b[12;11H│ book_id │ serial │ PK │\u001b[13;13Htitle \u001b[13;25Ht\u001b[13;27Hxt \u001b[13;34H \u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mau\u001b[14;16Hhor_id\u001b[14;25Hint \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;"]
|
||||
[15.073556,"o","230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[16;54H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Ursula K. Le Guin'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;22H \u001b[19;29H \u001b[19;36H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.092033,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;21H \u001b[2;23H \u001b[2;30H \u001b[2;32H \u001b[2;44H \u001b[3;11H┌\u001b[3;21H─\u001b[3;23H┬\u001b[3;30H─\u001b[3;32H┬\u001b[3;44H──┐\u001b[4;13HName \u001b[4;21H \u001b[4;23H│ Type\u001b[4;30H \u001b[4;32H│ Constraints\u001b[4;46H│\u001b[5;11H├───────────┼────────┼─────────────┤\u001b[6;11H│ book_id │ serial │ PK \u001b[6;46H│\u001b[7;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ title \u001b[7;22H │\u001b[7;25Htext \u001b[7;32H│ \u001b[7;42H │ \u001b[8;11H│ author_id\u001b[8;23H│\u001b[8;25Hint\u001b[8;32H│\u001b[8;46H│\u001b[9;11H└\u001b[9;23H┴\u001b[9;32H┴\u001b[9;46H┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[10;18Hinto\u001b[10;23H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[10;31H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;"]
|
||||
[15.092133,"o","27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Ursula K. Le Guin'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[12;11H┌───────────┬───────────────────┐\u001b[12;46H \u001b[13;13Hau\u001b[13;16Hhor_id\u001b[13;25Hname\u001b[13;32H \u001b[13;43H│\u001b[13;46H \u001b[14;11H├───────────┼───────────────────┤\u001b[14;46H \u001b[15;11H│ 1 │ Ursula K. Le Guin │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────────┘ \u001b[16;47H \u001b[16;54H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.09766,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.10361,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.108689,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.757541,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.799195,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.841028,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.883013,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.924995,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.96602,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.008663,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.049575,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.091809,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.133103,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.175149,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.216809,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.259083,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.302187,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.3436,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.38623,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.428422,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.468764,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.511605,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.553408,"o","\u001b[19;21H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.575104,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.595659,"o","\u001b[19;22H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.637466,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.679384,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.722744,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.765016,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.804922,"o","\u001b[19;27H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.847487,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.891135,"o","\u001b[19;29H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.931673,"o","\u001b[19;30H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.97342,"o","\u001b[19;31H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.016392,"o","\u001b[19;32H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.057585,"o","\u001b[19;33H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.099036,"o","\u001b[19;29H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.143305,"o","\u001b[19;35H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.183344,"o","\u001b[19;36H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `name`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.225011,"o","\u001b[19;37H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.269307,"o","\u001b[19;38H\u001b[38;2;255;107;107;48;2;24;27;34mI\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into\u001b[22;21Ha\u001b[22;23Hthors (name) values (`, expected string literal or `null` —\u001b[23;2Husage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.30978,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.352105,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.394557,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.435969,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.478497,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `name`: Type a\u001b[22;21Hq\u001b[22;23Hoted string (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.522292,"o","\u001b[19;44H\u001b[38;2;255;107;107;48;2;24;27;34mC\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into\u001b[22;21Ha\u001b[22;23Hthors (name) values (`, expected string literal or `null` —\u001b[23;2Husage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.564049,"o","\u001b[19;45H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.604675,"o","\u001b[19;46H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.646143,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.688415,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.732139,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.772114,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.81562,"o","\u001b[19;37H\u001b[38;2;195;232;141;48;2;24;27;34m'Italo Calvino'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.85806,"o","\u001b[19;52H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.897616,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬────────┬─────────────┐\u001b[3;11H│ Name │ Type │ Constraints │\u001b[4;11H├───────────┼────────┼─────────────┤\u001b[5;11H│ book_id │ serial │ PK │\u001b[6;13Htitle \u001b[6;25Ht\u001b[6;27Hxt \u001b[6;34H \u001b[7;13Hau\u001b[7;16Hhor_id\u001b[7;25Hint \u001b[8;11H└───────────┴────────┴─────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Ursula K. Le Guin'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted\u001b[10;31H \u001b[10;38H \u001b[10;45H \u001b[11;11H┌───────────┬───────────────────┐\u001b[12;11H│ author_id │ name │\u001b[13;11H├───────────┼───────────────────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ 1 │ Ursula K. Le Guin │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[16;47H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[16;54H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Italo Calvino'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;22H \u001b[19;29H \u001b[19;36H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.913609,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└\u001b[2;23H┴\u001b[2;32H┴\u001b[2;46H┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[3;18Hinto\u001b[3;23H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[3;31H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Ursula K. Le Guin'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[5;11H┌───────────┬───────────────────┐\u001b[5;46H \u001b[6;13Hau\u001b[6;16Hhor_id\u001b[6;25Hname\u001b[6;32H \u001b[6;43H│\u001b[6;46H \u001b[7;11H├───────────┼───────────────────┤\u001b[7;46H \u001b[8;11H│ 1 │ Ursula K. Le Guin │ \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────────┘\u001b[9;45H \u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[10;31H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[10;38H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[10;45H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Italo Calvino'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[12;11H┌───────────┬───────────────┐\u001b[12;43H \u001b[13;11H│ author_id │ name │ \u001b[14;11H├───────────┼───────────────┤ \u001b[14;43H \u001b[15;11H│ 2 │ Italo Calvino │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────┘ \u001b[16;47H \u001b[16;54H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.917626,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.921575,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.925475,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.683332,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.725321,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.765664,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.809977,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.851232,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.893343,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.933627,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.975297,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.017448,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.060914,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.101414,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.144577,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.185457,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.233597,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.270385,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.311242,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.353839,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.395441,"o","\u001b[19;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.401719,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.438975,"o","\u001b[19;20H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.480162,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mti\u001b[22;5Hle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.523228,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.565337,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.606938,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.648008,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.689742,"o","\u001b[19;26H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mau\u001b[22;5Hhor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.731724,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.774399,"o","\u001b[19;28H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;11H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.817021,"o","\u001b[19;29H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.860425,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.90029,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.942401,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.983851,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.025937,"o","\u001b[19;34H\u001b[38;2;86;182;194;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.067375,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.111099,"o","\u001b[19;36H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.153056,"o","\u001b[19;37H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.195261,"o","\u001b[19;38H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.236684,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.278951,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.319259,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.36334,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.404217,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.445825,"o","\u001b[19;39H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.486862,"o","\u001b[19;45H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.529346,"o","\u001b[19;46H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.573513,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.615986,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34mA\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.657872,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.70009,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34mW\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.740808,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.782591,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34mz\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.824746,"o","\u001b[19;53H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.866168,"o","\u001b[19;54H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.90918,"o","\u001b[19;55H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.950082,"o","\u001b[19;56H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.993279,"o","\u001b[19;57H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.034415,"o","\u001b[19;58H\u001b[38;2;255;107;107;48;2;24;27;34mf\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.076385,"o","\u001b[19;59H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.119423,"o","\u001b[19;60H\u001b[38;2;255;107;107;48;2;24;27;34mE\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.161365,"o","\u001b[19;61H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.202657,"o","\u001b[19;62H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.244405,"o","\u001b[19;63H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.287343,"o","\u001b[19;64H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.330067,"o","\u001b[19;65H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.369743,"o","\u001b[19;66H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.41219,"o","\u001b[19;67H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.455072,"o","\u001b[19;47H\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H,`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.498062,"o","\u001b[19;69H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `author_id`: Type an integer (e.g. 42, -7) or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.537944,"o","\u001b[19;70H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.58181,"o","\u001b[19;71H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext: `)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.623169,"o","\u001b[19;72H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.666363,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────────────────┐\u001b[3;45H \u001b[4;11H│\u001b[4;13Hauthor_id │ nam\u001b[4;29H \u001b[4;43H│\u001b[5;11H├\u001b[5;23H┼\u001b[5;43H┤\u001b[6;13H 1\u001b[6;25HUrsula\u001b[6;32HK.\u001b[6;35HLe\u001b[6;38HGuin\u001b[7;11H└\u001b[7;23H┴\u001b[7;43H┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[8;18Hinto\u001b[8;23H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[8;38H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[8;45H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Italo Calvino'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;2H"]
|
||||
[21.666478,"o","\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────────────┐ \u001b[10;45H \u001b[11;11H│\u001b[11;13Hauthor_id │ nam\u001b[11;29H \u001b[11;39H│\u001b[12;11H├\u001b[12;23H┼\u001b[12;39H┤\u001b[13;13H 2\u001b[13;25HItalo\u001b[13;31HCalvino\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└\u001b[14;23H┴\u001b[14;39H┘\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[15;20H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[15;46H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[15;57H\u001b[38;2;199;146;234;48;"]
|
||||
[21.666628,"o","2;24;27;34mvalues\u001b[15;64H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Ea\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;20H \u001b[19;28H \u001b[19;39H \u001b[19;46H \u001b[19;71H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.68698,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────────┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;45H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Italo Calvino'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[4;13H1 row(s) insert\u001b[4;29Hd\u001b[4;43H \u001b[5;11H┌\u001b[5;23H┬\u001b[5;39H┐ \u001b[6;13Hauthor_id\u001b[6;25Hname \u001b[6;32H \u001b[6;35H \u001b[6;38H │ \u001b[6;43H \u001b[7;11H├\u001b[7;23H┼\u001b[7;39H┤ \u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ \u001b[8;18H 2\u001b[8;23H│ Italo\u001b[8;31HCalvino │ \u001b[8;45H \u001b[9;11H└───────────┴───────────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[10;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[10;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[10;80H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;13H1 row(s) inser"]
|
||||
[21.687011,"o","t\u001b[11;29Hd\u001b[11;39H \u001b[12;11H┌\u001b[12;21H┬\u001b[12;23H─\u001b[12;39H─────┬───────────┐\u001b[13;13Hbook_id\u001b[13;21H│\u001b[13;23Htitle \u001b[13;31H \u001b[13;39H \u001b[13;44H│\u001b[13;46Hauthor_id\u001b[13;56H│\u001b[14;11H├\u001b[14;21H┼\u001b[14;23H─\u001b[14;39H─────┼───────────┤\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ 1 │ A Wizard\u001b[15;32Hof Earthsea │\u001b[15;46H 1 │ \u001b[15;64H \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴──────────────────────┴───────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.691286,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.695732,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.699749,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.347888,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.389636,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.432201,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.474803,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.515874,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.557981,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.599788,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.642355,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.684271,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.725878,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.770077,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.810733,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.852171,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.893271,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.935906,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.979024,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.019867,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.061819,"o","\u001b[19;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.107571,"o","\u001b[19;20H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.147442,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mti\u001b[22;5Hle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.167875,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.187161,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.229034,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.273085,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.315096,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.356173,"o","\u001b[19;26H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mau\u001b[22;5Hhor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.398014,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.440094,"o","\u001b[19;28H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;11H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.482566,"o","\u001b[19;29H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.524057,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.566129,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.607003,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.649184,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.692882,"o","\u001b[19;34H\u001b[38;2;86;182;194;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.735256,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.776756,"o","\u001b[19;36H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.820088,"o","\u001b[19;37H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.860476,"o","\u001b[19;38H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.902476,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.943109,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.988657,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.029266,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.071128,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.112065,"o","\u001b[19;39H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.155252,"o","\u001b[19;45H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.197729,"o","\u001b[19;46H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.238936,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.281242,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34mT\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.322769,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.366546,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.40731,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.449455,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34mL\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.491782,"o","\u001b[19;53H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.537852,"o","\u001b[19;54H\u001b[38;2;255;107;107;48;2;24;27;34mf\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.578661,"o","\u001b[19;55H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.617344,"o","\u001b[19;56H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.663641,"o","\u001b[19;57H\u001b[38;2;255;107;107;48;2;24;27;34mH\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.700618,"o","\u001b[19;58H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.742949,"o","\u001b[19;59H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.785342,"o","\u001b[19;60H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.827332,"o","\u001b[19;61H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.869157,"o","\u001b[19;62H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.909884,"o","\u001b[19;63H\u001b[38;2;255;107;107;48;2;24;27;34mf\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.951981,"o","\u001b[19;64H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.994873,"o","\u001b[19;65H\u001b[38;2;255;107;107;48;2;24;27;34mD\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.038447,"o","\u001b[19;66H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.078065,"o","\u001b[19;67H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.121761,"o","\u001b[19;68H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.162829,"o","\u001b[19;69H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.204587,"o","\u001b[19;70H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.247449,"o","\u001b[19;71H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.289622,"o","\u001b[19;72H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.333568,"o","\u001b[19;47H\u001b[38;2;195;232;141;48;2;24;27;34m'The Left Hand of Darkness'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H,`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.372607,"o","\u001b[19;74H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `author_id`: Type an integer (e.g. 42, -7) or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.41551,"o","\u001b[19;75H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.45662,"o","\u001b[19;76H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext: `)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.498356,"o","\u001b[19;77H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.542474,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────────────┐ \u001b[3;45H \u001b[4;11H│\u001b[4;13Hauthor_id │ nam\u001b[4;29H \u001b[4;39H│\u001b[5;11H├\u001b[5;23H┼\u001b[5;39H┤\u001b[6;13H 2\u001b[6;25HItalo\u001b[6;31HCalvino\u001b[7;11H└\u001b[7;23H┴\u001b[7;39H┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[8;18Hinto\u001b[8;23H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[8;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[8;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[8;80H\u001b[38;2;247;140;108;48;2;24"]
|
||||
[25.542551,"o",";27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌─────────┬──────────────────────┬───────────┐ \u001b[10;80H \u001b[11;11H│\u001b[11;13Hbook_id │ title \u001b[11;44H│\u001b[11;46Hauthor_id\u001b[11;56H│\u001b[12;11H├\u001b[12;21H┼\u001b[12;44H┼\u001b[12;56H┤\u001b[13;13H 1\u001b[13;23HA Wizard\u001b[13;32Hof\u001b[13;35HEarthsea\u001b[13;46H 1\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└\u001b[14;21H┴\u001b[14;44H┴\u001b[14;56H┘\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[15;32H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b["]
|
||||
[25.542731,"o","38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[15;46H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[15;64H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'The Left Hand \u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;195;232;141;48;2;24;27;34mDarkness'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;20H \u001b[19;28H \u001b[19;39H \u001b[19;46H \u001b[19;76H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;"]
|
||||
[25.542845,"o","144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.560726,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[3;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[3;80H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[4;13H1 row(s) insert\u001b[4;29Hd\u001b[4;39H \u001b[5;11H┌\u001b[5;21H┬\u001b[5;23H─\u001b[5;39H─────┬───────────┐\u001b[6;13Hbook_id\u001b[6;21H│\u001b[6;23Htitle \u001b[6;31H \u001b[6;39H \u001b[6;44H│\u001b[6;46Hauthor_id\u001b[6;56H│\u001b[7;11H├\u001b[7;21H┼\u001b[7;23H─\u001b[7;39H─────┼───────────┤\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ \u001b[8;18H 1 │\u001b[8;23HA Wizard of Earthsea │ \u001b[8;48H 1 │ \u001b[8;80H \u001b[9;11H└─────────┴──────────────────────┴───────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;"]
|
||||
[25.560832,"o","2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'The Left Hand of Darkness'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[10;85H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;13H1 row(s) inserted\u001b[11;44H \u001b[11;46H \u001b[11;56H \u001b[12;11H┌\u001b[12;21H┬\u001b[12;44H─\u001b[12;49H┬\u001b[12;56H─────┐\u001b[13;13Hbook_id\u001b[13;23Htitle \u001b[13;32H \u001b[13;35H \u001b[13;44H \u001b[13;49H│\u001b[13;51Hauthor_id\u001b[13;61H│\u001b[14;11H├\u001b[14;21H┼\u001b[14;44H─\u001b[14;49H┼\u001b[14;56H─────┤\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ 2 │ The\u001b[15;27HLeft\u001b[15;32HHand of Darkness │ \u001b[15;57H 1 │ \u001b[15;64H \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.565746,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.571302,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.576105,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.225367,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.26847,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.309658,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.352111,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.394787,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.436285,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.481442,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.523278,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.560425,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.60293,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.644382,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.686973,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.728209,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.769608,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.812799,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.855632,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.896905,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.938499,"o","\u001b[19;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.980256,"o","\u001b[19;20H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.022978,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mti\u001b[22;5Hle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.042087,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.064359,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.106249,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.148573,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.189385,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.234237,"o","\u001b[19;26H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mau\u001b[22;5Hhor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.274217,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.319563,"o","\u001b[19;28H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;11H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.36141,"o","\u001b[19;29H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.400535,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.44177,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.483868,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.526861,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.56877,"o","\u001b[19;34H\u001b[38;2;86;182;194;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.610318,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.651884,"o","\u001b[19;36H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.695168,"o","\u001b[19;37H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.735674,"o","\u001b[19;38H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.777935,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.820764,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.862969,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.903914,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.948439,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.990408,"o","\u001b[19;39H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.031749,"o","\u001b[19;45H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.073142,"o","\u001b[19;46H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.115509,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.155898,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34mI\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.199072,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.243484,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.283004,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.324882,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.365978,"o","\u001b[19;53H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.409383,"o","\u001b[19;54H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.451604,"o","\u001b[19;55H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.49323,"o","\u001b[19;56H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.535979,"o","\u001b[19;57H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g. 'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.577086,"o","\u001b[19;58H\u001b[38;2;255;107;107;48;2;24;27;34mC\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle, author_id) values (`, expected string literal or `null`\u001b[23;2H— usage: insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.623486,"o","\u001b[19;59H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.662642,"o","\u001b[19;60H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.704087,"o","\u001b[19;61H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.746812,"o","\u001b[19;62H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.786215,"o","\u001b[19;63H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.828262,"o","\u001b[19;47H\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H,`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.87093,"o","\u001b[19;65H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `author_id`: Type an integer (e.g. 42, -7) or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.912704,"o","\u001b[19;66H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.957779,"o","\u001b[19;67H\u001b[38;2;247;140;108;48;2;24;27;34m2\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext: `)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.997168,"o","\u001b[19;68H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.038707,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[2;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[2;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[2;80H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;37H \u001b[3;48H \u001b[3;55H \u001b[3;80H \u001b[4;11H┌─────────┬──────────────────────┬───────────┐\u001b[5;11H│ book_id │ title │ author_id │\u001b[6;11H├─────────┼──────────────────────┼───────────┤\u001b[7;11H│ 1 │ A Wizard of Earthsea │ 1 │\u001b[8;11H└─────────┴──────────────────────┴───────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27"]
|
||||
[29.038826,"o",";34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'The Left Hand of Darkness'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[9;85H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;37H \u001b[10;48H \u001b[10;55H \u001b[10;85H \u001b[11;11H┌─────────┬───────────────────────────┬───────────┐\u001b[12;11H│ book_id │ title │ author_id │\u001b[13;11H├─────────┼───────────────────────────┼───────────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ 2 │ The Left Hand of Darkness │ 1 │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[16;64H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[16;85H\u001b[38;2;247;140;108;48;2;24;27;34m2\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;"]
|
||||
[29.038868,"o","230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;20H \u001b[19;28H \u001b[19;39H \u001b[19;46H \u001b[19;67H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.059581,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴──────────────────────┴───────────┘ \u001b[2;80H \u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[3;37H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[3;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'The Left Hand of Darkness'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[3;85H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;"]
|
||||
[29.059649,"o","2;24;27;34m 1 row(s) inserted \u001b[5;11H┌─────────┬───────────────────────────┬───────────┐\u001b[6;11H│ book_id │ title │ author_id\u001b[6;61H│\u001b[7;11H├─────────┼───────────────────────────┼───────────┤\u001b[8;11H│ 2 │ The Left Hand of Darkness │ \u001b[8;59H1\u001b[8;61H│\u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘ \u001b[9;85H \u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks"]
|
||||
[29.059744,"o","\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[10;37H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[10;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[10;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[10;76H\u001b[38;2;247;140;108;48;2;24;27;34m2\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[12;11H┌─────────┬──────────────────┬───────────┐ \u001b[12;61H \u001b[13;11H│ book_id │ title │ author_id │ \u001b[14;11H├─────────┼──────────────────┼───────────┤\u001b[14;59H \u001b[14;61H \u001b[15;11H│ 3 │ Invisible Cities │ 2"]
|
||||
[29.059787,"o"," │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴──────────────────┴───────────┘ \u001b[16;57H \u001b[16;64H \u001b[16;85H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.066553,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.073213,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.079871,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.022328,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.06409,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.107166,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.149778,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.191423,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.233087,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.274688,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.317686,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.358602,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.401226,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.443569,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.484874,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.526369,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.540686,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.568123,"o","\u001b[19;15H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.609675,"o","\u001b[19;16H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.653607,"o","\u001b[19;17H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.694795,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.737128,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'The Left Hand of Darkness'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[2;85H\u001b[38;2;247;140;108;48;2;24;27;34m1\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;37H \u001b[3;48H \u001b[3;55H \u001b[3;85H \u001b[4;11H┌─────────┬───────────────────────────┬───────────┐\u001b[5;11H│ book_id │ title │ author_id │\u001b[6;11H├─────────┼───────────────────────────┼───────────┤\u001b[7;11H│ 2 │ The Left Hand of Darkness │ 1 │\u001b[8;11H└─────────┴───────────────────────────┴───────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[9;76H\u001b[38;2;247;140;108;48;2;24;27;34m2\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;37H \u001b[10;48H \u001b[10;55H \u001b[10;76H \u001b[11;11H┌─────────┬──────────────────┬───────────┐\u001b[12;11H│ book_id │ title │ author_id │\u001b[13;11H├─────────┼──────────────────┼───────────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ 3 │ Invisible Cities │ 2 │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22"]
|
||||
[30.737176,"o","m\u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴──────────────────┴───────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[19;12H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.741763,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘ \u001b[2;85H \u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[3;37H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[3;48H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;55H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[3;76H\u001b[38;2;247;140;108;48;2;24;27;34m2\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[5;11H┌─────────┬──────────────────┬───────────┐ \u001b[5;61H \u001b[6;11H│ book_id │ title │ author_id │ \u001b[7;11H├─────────┼──────────────────┼───────────┤\u001b[7;59H \u001b[7;61H \u001b[8;11H│ 3 │ Invisible Cities │ 2 │ \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴──────────────────┴───────────┘ \u001b[9;55H \u001b[9;76H \u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;21H\u001b[38;2;230;230;230;48;2;24;27;34m─\u001b[11;23H┬\u001b[11;40H─\u001b[11;43H┐ \u001b[12;13Hauthor_id\u001b[12;23H│ name\u001b[12;40H \u001b[12;42H │ \u001b[12;52H \u001b[13;21H─\u001b[13;23H┼\u001b[13;40H─\u001b[13;43H┤ \u001b[14;19H \u001b[14;21H1\u001b[14;23H│ Ur\u001b[14;28Hula K. Le Guin\u001b[14;43H│\u001b[14;50H \u001b[14;52H \u001b[15;11H│ 2 │ Italo Calvino │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.746052,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.750437,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.754703,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.759186,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.237799,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.422521,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.462697,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.505185,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.547976,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.58948,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.631582,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.673002,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.715671,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.75852,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.799773,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.841331,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.883867,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.924518,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.967209,"o","\u001b[19;15H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.012391,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.055854,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[2;76H\u001b[38;2;247;140;108;48;2;24;27;34m2\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;37H \u001b[3;48H \u001b[3;55H \u001b[3;76H \u001b[4;11H┌─────────┬─────────"]
|
||||
[33.055925,"o","─────────┬───────────┐\u001b[5;11H│ book_id │ title │ author_id │\u001b[6;11H├─────────┼──────────────────┼───────────┤\u001b[7;11H│ 3 │ Invisible Cities │ 2 │\u001b[8;11H└─────────┴──────────────────┴───────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────────────────┐\u001b[11;11H│ author_id │ name │\u001b[12;11H├─────"]
|
||||
[33.056092,"o","──────┼───────────────────┤\u001b[13;11H│ 1 │ Ursula K. Le Guin │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;21H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m2\u001b[14;25HItalo Calvino \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────────┴───────────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[19;12H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O"]
|
||||
[33.056106,"o","\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.065479,"o","\u001b[2;11H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauth\u001b[2;26Hr\u001b[2;28H\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[2;37H \u001b[2;48H \u001b[2;55H \u001b[2;76H \u001b[3;11H┌───────────┬───────────────────┐\u001b[4;11H│ author_id │ name │ \u001b[5;11H├───────────┼───────────────────┤ \u001b[5;52H \u001b[6;11H│ 1 │ Ursula K. Le Guin │ \u001b[7;19H \u001b[7;21H2\u001b[7;23H│ Italo Calvino \u001b[7;40H \u001b[7;43H│\u001b[7;50H \u001b[7;52H \u001b[8;21H─\u001b[8;23H┴\u001b[8;40H─\u001b[8;43H┘ \u001b[9;21H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;21H┬\u001b[10;23H─\u001b[10;43H──────┬───────────┐\u001b[11;13Hbook_id │\u001b[11;23Htitle \u001b[11;43H \u001b[11;49H│\u001b[11;51Hauthor_id\u001b[11;61H│\u001b[12;21H┼\u001b[12;23H─\u001b[12;43H──────┼───────────┤\u001b[13;19H1\u001b[13;21H│\u001b[13;23HA\u001b[13;25HWizard\u001b[13;32Hof\u001b[13;35HEarthsea \u001b[13;49H│\u001b[13;59H1\u001b[13;61H│\u001b[14;19H2\u001b[14;21H│\u001b[14;23HThe Left Hand \u001b[14;38Hf\u001b[14;40HDarkness\u001b[14;49H│\u001b[14;59H1\u001b[14;61H│\u001b[15;11H│ 3 │ Invisible Cities \u001b[15;49H│\u001b[15;59H2\u001b[15;61H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.075,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.083839,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.092987,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[34.092143,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[34.554655,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.034548,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mmode\u001b[22;7Hmessages\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.079983,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.121258,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.160579,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mmode\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.203156,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msimple\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34madvanced\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.245738,"o","\u001b[19;7H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madvanced\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.287296,"o","\u001b[19;8H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.3291,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.371484,"o","\u001b[19;10H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.413811,"o","\u001b[19;11H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.456143,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.497842,"o","\u001b[19;13H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[35.538482,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34madvanced\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[36.543022,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[36.728338,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────────┬───────────────────┐\u001b[3;11H│ author_id │ name │\u001b[4;11H├───────────┼───────────────────┤\u001b[5;11H│ 1 │ Ursula K. Le Guin │\u001b[6;21H2\u001b[6;25HItalo Calvino \u001b[7;11H└───────────┴───────────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌─────────┬───────────────────────────┬───────────┐\u001b[10;11H│ book_id │ title │ author_id │\u001b[11;11H├─────────┼───────────────────────────┼───────────┤\u001b[12;11H│ 1 │ A Wizard of Earthsea │ 1 │\u001b[13;19H2\u001b[13;23HThe Left\u001b[13;32HHand of Darkness\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;19H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m3\u001b[14;23HInvisible Cities\u001b[14;40H \u001b[14;59H2\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mmode: advanced \u001b[18;1H\u001b[38;2;224;96;96;48;2;24;27;34m╭ \u001b[1m\u001b[38;2;255;158;107;48;2;24;27;34mADVANCED\u001b[22m\u001b[38;2;224;96;96;48;2;24;27;34m ──────────────────────────────────────────────────────────────────────────────╮\u001b[19;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;7H \u001b[19;90H\u001b[38;2;224;96;96;48;2;24;27;34m│\u001b[20;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[37.728034,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.108134,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[22;17Hselect\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.148681,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34meed\u001b[22;8Helect\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.191139,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mlect\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.227467,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.2327,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.27885,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.316973,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mselect\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.35962,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtrue\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfalse\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mexists\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcase\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdistinct\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mall\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[22;84H\u001b[38;2;230;230;230;48;2;24;27;34m>\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.406223,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;12H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mall\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[22;20Havg\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;84H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.44469,"o","\u001b[19;10H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;11H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.486576,"o","\u001b[19;11H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.527624,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.569001,"o","\u001b[19;13H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.610635,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.660083,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNo such column: `authors`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.694109,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.739486,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mno such table or alias in scope: `authors`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.778978,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.822377,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.864197,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.906388,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[19;21H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[22;25Htitle\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[22;35Hnull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtrue\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfalse\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mexists\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcase\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcoalesce\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcount\u001b[22;86H\u001b[38;2;230;230;230;48;2;24;27;34m>\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.948375,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[38.991115,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mno such table or alias\u001b[22;25Hin scope:\u001b[22;35H`authors`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;86H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.032436,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.074896,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.117168,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.156325,"o","\u001b[19;23H\u001b[38;2;255;107;107;48;2;24;27;34mbooks\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.202292,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[19;23Hbooks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.244691,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[19;23Hbooks\u001b[19;29H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mno such table or alias in scope: `authors`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.286547,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.328622,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.370312,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.412576,"o","\u001b[19;33H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.452052,"o","\u001b[19;34H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.492727,"o","\u001b[19;35H\u001b[38;2;86;182;194;48;2;24;27;34mf\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.536977,"o","\u001b[19;36H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.577043,"o","\u001b[19;37H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.620472,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[19;23Hbooks\u001b[19;35H\u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.660677,"o","\u001b[19;39H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.703861,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[19;23Hbooks\u001b[19;40Hb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.745006,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.787432,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.830179,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.872185,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[19;40Hbooks\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mno such table or alias in scope: `authors`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.914347,"o","\u001b[19;45H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.956113,"o","\u001b[19;46H\u001b[38;2;86;182;194;48;2;24;27;34mj\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[39.998382,"o","\u001b[19;47H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.040391,"o","\u001b[19;48H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.084832,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[19;46H\u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.125152,"o","\u001b[19;50H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.164971,"o","\u001b[19;51H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.21121,"o","\u001b[19;52H\u001b[38;2;86;182;194;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.252924,"o","\u001b[19;53H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.294917,"o","\u001b[19;54H\u001b[38;2;86;182;194;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.33681,"o","\u001b[19;55H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.376767,"o","\u001b[19;56H\u001b[38;2;86;182;194;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.419096,"o","\u001b[19;57H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.460871,"o","\u001b[19;58H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mas\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.502936,"o","\u001b[19;59H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.54436,"o","\u001b[19;59H\u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.584912,"o","\u001b[19;61H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtrue\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfalse\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mexists\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcase\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcoalesce\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcount\u001b[22;86H\u001b[38;2;230;230;230;48;2;24;27;34m>\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.628201,"o","\u001b[19;62H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;86H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.670559,"o","\u001b[19;63H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.711729,"o","\u001b[19;64H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.756873,"o","\u001b[19;65H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.79882,"o","\u001b[19;66H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m`books` is a table — write `books.<column>` to reference one of its columns\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.836242,"o","\u001b[19;62H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbook_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.879646,"o","\u001b[19;68H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;11H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.924636,"o","\u001b[19;69H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[40.964601,"o","\u001b[19;70H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.006419,"o","\u001b[19;71H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.048441,"o","\u001b[19;72H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.090631,"o","\u001b[19;73H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.130652,"o","\u001b[19;74H\u001b[38;2;255;107;107;48;2;24;27;34m_\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.173324,"o","\u001b[19;75H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.216269,"o","\u001b[19;68H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.258581,"o","\u001b[19;77H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mleft\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mright\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcross\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minner\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwhere\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mgroup\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mhaving\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munion\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mintersect\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mexcept\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mlimit\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.300286,"o","\u001b[19;78H\u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtru\u001b[22;41Hfalse\u001b[22;47Hexists\u001b[22;54Hcase\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcoalesce\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcount\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mdate\u001b[38;2;230;230;230;48;2;24;27;34m >\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.342743,"o","\u001b[19;79H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.382915,"o","\u001b[19;80H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;20H\u001b[27m\u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;87H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.426467,"o","\u001b[19;81H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;19H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.469901,"o","\u001b[19;82H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.510102,"o","\u001b[19;2H\u001b[38;2;139;144;154;48;2;24;27;34m<\u001b[19;4H\u001b[38;2;199;146;234;48;2;24;27;34mct\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mti\u001b[19;30Hle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[19;78H\u001b[38;2;255;107;107;48;2;24;27;34mauth\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.552597,"o","\u001b[19;3H\u001b[38;2;199;146;234;48;2;24;27;34mct\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;23Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;40Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;62Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mautho\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.595928,"o","\u001b[19;3H\u001b[38;2;199;146;234;48;2;24;27;34mt\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;22Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;39Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;61Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mauthor\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.6348,"o","\u001b[19;3H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;21Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;38Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;60Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34m`authors`\u001b[22;12His a table — write `authors.<column>` to reference one of its columns\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.679178,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;20Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;37Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;59Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[22;2H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[22;12Hname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.720573,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34muthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;19Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;36Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;58Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[22;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.76158,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;18Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;35Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;57Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mau\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.80538,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mhors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;17Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;34Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;56Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34maut\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.846705,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;16Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;33Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;55Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mauth\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.887371,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mrs\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;15Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;32Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;54Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mautho\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.932783,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;14Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;31Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;53Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mauthor\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[41.972676,"o","\u001b[19;3H\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;13Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;30Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;52Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mauthor_\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.016092,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;12Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;29Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;51Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mauthor_i\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.056746,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mame\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;11Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;28Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;50Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.098633,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mme\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;10Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;27Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;49Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[38;2;199;146;234;48;2;24;27;34mleft\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mright\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcross\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minner\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwhere\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mgroup\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mhaving\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munion\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mintersect\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mexcept\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mlimit\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.141039,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;9Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;26Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;48Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[22;2H\u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.18257,"o","\u001b[19;3H\u001b[38;2;139;144;154;48;2;24;27;34m,\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;8Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;25Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;47Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mor\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.224978,"o","\u001b[19;3H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;7Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;24Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;46Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mord\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.266183,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;6Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;23Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;45Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34morde\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.308285,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[19;5Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;22Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;44Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.350819,"o","\u001b[19;4H\u001b[38;2;86;182;194;48;2;24;27;34mks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;21Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;43Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.392514,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;20Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;42Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.434482,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;19Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;41Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.477105,"o","\u001b[19;3H\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;18Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;40Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mnull\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtrue\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfalse\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mexists\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcase\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcoalesce\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mcount\u001b[22;86H\u001b[38;2;230;230;230;48;2;24;27;34m>\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.520316,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;17Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;39Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[22;20H\u001b[38;2;130;207;253;48;2;24;27;34mabs\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;130;207;253;48;2;24;27;34mavg\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;86H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.559547,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;16Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;38Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mau\u001b[22;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.602022,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mtle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;15Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;37Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34maut\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.644078,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;14Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;36Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mauth\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.685655,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;13Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;35Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mautho\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.729419,"o","\u001b[19;3H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;12Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;34Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mauthor\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.77221,"o","\u001b[19;3H\u001b[38;2;199;146;234;48;2;24;27;34mfrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;11Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;33Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;255;107;107;48;2;24;27;34mauthors\u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34m`authors`\u001b[22;12His a table — write `authors.<column>` to reference one of its columns\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.812325,"o","\u001b[19;3H\u001b[38;2;199;146;234;48;2;24;27;34mrom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;10Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;32Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[22;2H\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[22;12Hname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.854552,"o","\u001b[19;3H\u001b[38;2;199;146;234;48;2;24;27;34mom\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;9Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;31Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[22;2H\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.899792,"o","\u001b[19;3H\u001b[38;2;199;146;234;48;2;24;27;34mm\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;8Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;30Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mna\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.939569,"o","\u001b[19;3H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;7Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;29Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;255;107;107;48;2;24;27;34mnam\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[42.979652,"o","\u001b[19;3H\u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;6Hks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mjoin\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mon\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbo\u001b[19;28Hks\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m=\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mauthor_id\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34morder\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mby\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mauthors\u001b[38;2;139;144;154;48;2;24;27;34m.\u001b[38;2;86;182;194;48;2;24;27;34mname\u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[43.020671,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m├\u001b[2;23H┼\u001b[2;43H┤\u001b[3;13H 1\u001b[3;25HUrsula\u001b[3;32HK.\u001b[3;35HLe\u001b[3;38HGuin\u001b[4;11H│ 2 │ Italo Calvino │\u001b[5;11H└───────────┴───────────────────┘\u001b[6;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[6;16Hdata\u001b[6;21H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[6;31H \u001b[6;43H \u001b[7;11H┌\u001b[7;21H┬\u001b[7;23H─\u001b[7;43H──────┬───────────┐\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ book_id\u001b[8;21H│ title\u001b[8;49H│\u001b[8;51Hauthor_id\u001b[8;61H│\u001b[9;11H├\u001b[9;21H┼\u001b[9;49H┼\u001b[9;61H┤\u001b[10;13H 1\u001b[10;23HA Wizard\u001b[10;32Hof\u001b[10;35HEarthsea\u001b[10;51H 1\u001b[11;11H│ 2 │ The Left Hand of Darkness │ 1 │\u001b[12;19H3\u001b[12;23HInv\u001b[12;27Hsible Cities \u001b[12;59H2\u001b[13;11H└─────────┴─"]
|
||||
[43.02073,"o","──────────────────────────┴───────────┘\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mmode:\u001b[14;17Hadvanced \u001b[14;33H \u001b[14;49H \u001b[14;59H \u001b[14;61H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;2H\u001b[22m\u001b[38;2;255;158;107;48;2;24;27;34m[advanced] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: select authors.name, books.title from books\u001b[15;66Hjoin\u001b[15;71Hauthors\u001b[15;79Ho\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mbooks.auth\u001b[16;13Hr_id = \u001b[16;21Huthors.author_id\u001b[16;38Horder\u001b[16;44Hby\u001b[16;47Hauthors.name\u001b[19;2H\u001b[7m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;22H \u001b[19;25H \u001b[19;41H \u001b[19;43H \u001b[19;61H \u001b[19;67H \u001b[19;70H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[43.026088,"o","\u001b[2;21H\u001b[38;2;230;230;230;48;2;24;27;34m┼\u001b[2;23H─\u001b[2;43H──────┼───────────┤\u001b[3;19H1\u001b[3;21H│\u001b[3;23HA\u001b[3;25HWizard\u001b[3;32Hof\u001b[3;35HEarthsea \u001b[3;49H│\u001b[3;59H1\u001b[3;61H│\u001b[4;19H2\u001b[4;21H│\u001b[4;23HThe Left Hand \u001b[4;38Hf\u001b[4;40HDarkness\u001b[4;49H│\u001b[4;59H1\u001b[4;61H│\u001b[5;11H│ 3 │ Invisible Cities \u001b[5;49H│\u001b[5;59H2\u001b[5;61H│\u001b[6;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└─────────┴───────────────────────────┴───────────┘\u001b[7;11Hmode: advanced \u001b[8;2H\u001b[38;2;255;158;107;48;2;24;27;34m[advanced] \u001b[38;2;230;230;230;48;2;24;27;34mselect authors.name,\u001b[8;34Hbooks.title\u001b[8;46Hfrom\u001b[8;51Hbooks join authors\u001b[8;70Hon\u001b[8;73Hbooks.author_id\u001b[8;89H=\u001b[9;2Hauthors.author_id order by authors.name\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;11H┌──────"]
|
||||
[43.026168,"o","─────────────┬───────────────────────────┐\u001b[10;61H \u001b[11;13Hname\u001b[11;19H \u001b[11;21H \u001b[11;23H \u001b[11;27H │ title \u001b[11;40H \u001b[11;49H \u001b[11;59H│\u001b[11;61H \u001b[12;11H├───────────────────┼───────────────────────────┤\u001b[12;61H \u001b[13;11H│ Italo Calvino │ Invisible Cities │ \u001b[14;11H│ Ursula K. Le\u001b[14;26HGuin\u001b[14;31H│\u001b[14;33HA\u001b[14;35HWizard\u001b[14;42Hof\u001b[14;45HEarthsea\u001b[14;59H│\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ Ursula K. Le Guin │ The Left Hand of Darkness │ \u001b[15;66H \u001b[15;71H \u001b[15;79H \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────────────────┴───────────────────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[43.031976,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[43.038366,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[43.04363,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[44.045185,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[44.524311,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.705927,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.747694,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.791333,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.834665,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.873633,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.913984,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.958312,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[45.998285,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.041889,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.083461,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.126372,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.167225,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.211976,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.253772,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.295827,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.337806,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.379969,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.422064,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.461147,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.503806,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.548224,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.586372,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.631675,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.670448,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.712332,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.755613,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.79845,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.839475,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.880628,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.922255,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[46.968153,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.010339,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.04926,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.09156,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.136208,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.176722,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.218468,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.260356,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.302206,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.344737,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.387001,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.427075,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.468139,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.510785,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.553831,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.598136,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.640418,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.679706,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.724158,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.76992,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.808188,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.847742,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.88843,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.931564,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[47.974091,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.01635,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.057779,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.100175,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.140233,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.184252,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.224369,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.2681,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.31214,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.354085,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[48.39683,"o","\u001b[12;47H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[13;47H Each book paired with its author, joined \u001b[14;47H across the two tables. \u001b[15;47H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[49.39476,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[51.683843,"o","\u001b[12;47H\u001b[38;2;230;230;230;48;2;24;27;34m────────────┤ \u001b[13;47Hes │ \u001b[14;47Hrthsea │ \u001b[15;47Hof Darkness │ \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[53.183843,"o",""]
|
||||
@@ -0,0 +1,272 @@
|
||||
{"version":2,"width":90,"height":26,"timestamp":1781556534,"title":"Simple mode, then advanced — with the SQL the playground runs for you","env":{"TERM":"tmux-256color","SHELL":"/usr/bin/bash"}}
|
||||
[0,"o","\u001b[?1049h"]
|
||||
[0.005602,"o","\u001b[1;1H\u001b[38;2;74;82;101;48;2;24;27;34m╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Output \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[3;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[4;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[5;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[6;"]
|
||||
[0.005664,"o","1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[7;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[8;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[9;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[10;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[11;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[12;1H│\u001b[38;2;230;230;230;48;2;24;27;34"]
|
||||
[0.005724,"o","m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[13;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[14;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[15;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[16;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[17;1H╰─────────────────────────────────────────────────────────────────────────────"]
|
||||
[0.005782,"o","───────────╯\u001b[18;1H╭ \u001b[1m\u001b[38;2;110;196;255;48;2;24;27;34mSIMPLE\u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m ────────────────────────────────────────────────────────────────────────────────╮\u001b[19;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[20;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[21;1H╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Hint \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────"]
|
||||
[0.005876,"o","────────────────────────────────────────────╮\u001b[22;1H│\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[23;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[24;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[25;1H\u001b[38;2;139;144;154;48;2;24;27;34mProject: \u001b[1m[TEMP] \u001b[38;2;230;230;230;48;2;24;27;34mFinding Sleepy Finch\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m complete · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m run \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.009208,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.010322,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.045972,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcopy\u001b[22;7Hchange\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.091047,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.135182,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.180832,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.225453,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.270622,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.31495,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;110;196;255;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mm:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.360159,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.40506,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.45261,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.495108,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.540505,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.585727,"o","\u001b[19;14H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.630866,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.675552,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.720595,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.765401,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.810487,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.855619,"o","\u001b[19;20H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.900094,"o","\u001b[19;21H\u001b[38;2;255;107;107;48;2;24;27;34mw\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.945562,"o","\u001b[19;22H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.990535,"o","\u001b[19;23H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.035585,"o","\u001b[19;21H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.080578,"o","\u001b[19;25H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.126024,"o","\u001b[19;26H\u001b[38;2;255;107;107;48;2;24;27;34mp\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.170908,"o","\u001b[19;26H\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.215329,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[2;20H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[2;27Htable\u001b[2;33H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[2;39H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[2;44Hpk\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;15H \u001b[19;21H \u001b[19;26H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.231279,"o","\u001b[2;11H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtabl\u001b[2;23H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[2;44H \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks\u001b[4;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌──────┬────────┬─────────────┐\u001b[5;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[5;13HName\u001b[5;18H│\u001b[5;20HType\u001b[5;27H│\u001b[5;29HConstraints\u001b[5;41H│\u001b[6;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├──────┼────────┼─────────────┤\u001b[7;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[7;13Hid\u001b[7;18H│\u001b[7;20Hserial\u001b[7;27H│\u001b[7;29HPK\u001b[7;41H│\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└──────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.23355,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.235535,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.237583,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.006413,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.05129,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.096034,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.141343,"o","\u001b[19;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.186041,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[22;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.230898,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.276574,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.321162,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.366133,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.4114,"o","\u001b[19;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.456033,"o","\u001b[19;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.500912,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.546471,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.59077,"o","\u001b[19;13H\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.63632,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;7H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.681104,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.716695,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.725652,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.771093,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.816083,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.861712,"o","\u001b[19;21H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.906036,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.950953,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.996361,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.042347,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.085732,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.131094,"o","\u001b[19;27H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.175819,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.221241,"o","\u001b[19;29H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.266461,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.311636,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.356754,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mx\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.401186,"o","\u001b[19;30H\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.44737,"o","\u001b[19;34H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.490832,"o","\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[9;20H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[9;24Hcolumn\u001b[9;31Hto\u001b[9;34H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[9;41H\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[9;47H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;6H \u001b[19;13H \u001b[19;16H \u001b[19;23H \u001b[19;29H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.508032,"o","\u001b[9;11H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;47H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks\u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────┬────────┬─────────────┐\u001b[12;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[12;13HName\u001b[12;19H│\u001b[12;21HType\u001b[12;28H│\u001b[12;30HConstraints\u001b[12;42H│\u001b[13;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────┼────────┼─────────────┤\u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[14;13Hid\u001b[14;19H│\u001b[14;21Hserial\u001b[14;28H│\u001b[14;30HPK\u001b[14;42H│\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[15;13Htitle\u001b[15;19H│\u001b[15;21Htext\u001b[15;28H│\u001b[15;42H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.510375,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.512468,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.514597,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.383132,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.426091,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.474404,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.516908,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.561335,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.606021,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.651613,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.695919,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.74118,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.786492,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.831561,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.876383,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.922141,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.966021,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.992961,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.011328,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.056261,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.102247,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.145896,"o","\u001b[19;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.191505,"o","\u001b[19;20H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mid\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.236305,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.281559,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.326526,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.371657,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.416351,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.461402,"o","\u001b[19;26H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.506327,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.553035,"o","\u001b[19;28H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.596757,"o","\u001b[19;29H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.642224,"o","\u001b[19;30H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.687314,"o","\u001b[19;31H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.732449,"o","\u001b[19;32H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.776781,"o","\u001b[19;28H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.821867,"o","\u001b[19;34H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.866419,"o","\u001b[19;35H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.911595,"o","\u001b[19;36H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.957918,"o","\u001b[19;37H\u001b[38;2;255;107;107;48;2;24;27;34mA\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.00276,"o","\u001b[19;38H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.048092,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mW\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.093002,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.137866,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34mz\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.182114,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.22691,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.272637,"o","\u001b[19;44H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.31681,"o","\u001b[19;45H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.362395,"o","\u001b[19;46H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.407287,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34mf\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.452426,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.498367,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34mE\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.54289,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.587882,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.636037,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.679653,"o","\u001b[19;53H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.725118,"o","\u001b[19;54H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.7715,"o","\u001b[19;55H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.813112,"o","\u001b[19;56H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.858311,"o","\u001b[19;36H\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.90372,"o","\u001b[19;58H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.946388,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;18H \u001b[2;24H \u001b[2;30H \u001b[2;35H \u001b[3;11H┌──────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├──────┼────────┼─────────────┤\u001b[6;11H│ id │ serial │ PK │\u001b[7;11H└──────┴────────┴─────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[9;22H \u001b[9;25H \u001b[9;32H \u001b[9;38H \u001b[10;11H┌───────┬────────┬─────────────┐\u001b[11;11H│ Name │ Type │ Constraints │\u001b[12;11H├───────┼────────┼─────────────┤\u001b[13;11H│ id │ serial │ PK │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mtitle\u001b[14;21Ht\u001b[14;23Hxt \u001b[14;30H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[16;46H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[16;53H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;20H \u001b[19;28H \u001b[19;35H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.964856,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[2;22Hto\u001b[2;25H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[2;32H\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[2;38H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;11H\u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[4;11H┌───────┬────────┬─────────────┐\u001b[5;11H│ Name │ Type │ Constraints │\u001b[6;11H├───────┼────────┼─────────────┤\u001b[7;11H│ id │ serial │ PK │\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ title │ text │ \u001b[8;32H \u001b[8;38H │ \u001b[9;11H└───────┴────────┴─────────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[10;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;13H1 row(s) inserted \u001b[11;42H \u001b[12;11H┌\u001b[12;16H┬\u001b[12;19H─\u001b[12;28H─\u001b[12;39H┐ \u001b[13;16H│\u001b[13;18Htitl\u001b[13;23H \u001b[13;28H \u001b[13;30H \u001b[13;39H│\u001b[13;42H \u001b[14;11H├────┼──────────────────────┤\u001b[14;42H \u001b[15;11H│ 1 │ A Wizard of Earthsea │ \u001b[16;2H\u001b[38;2;159;216"]
|
||||
[7.964881,"o",";145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘ \u001b[16;46H \u001b[16;53H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.967361,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.969787,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.972355,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.686639,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.731989,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.777608,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.822721,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.867147,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.912409,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.957609,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.002627,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.047696,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.092834,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.138386,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.182329,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.227374,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.272004,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.317476,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.361859,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.407686,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.448543,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.453062,"o","\u001b[19;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.497825,"o","\u001b[19;20H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mid\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.54304,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.587611,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.631853,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.677279,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.721511,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.766601,"o","\u001b[19;26H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.812763,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.857566,"o","\u001b[19;28H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.903332,"o","\u001b[19;29H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.946708,"o","\u001b[19;30H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.993148,"o","\u001b[19;31H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.03758,"o","\u001b[19;32H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.081372,"o","\u001b[19;28H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.127723,"o","\u001b[19;34H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.172202,"o","\u001b[19;35H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.217871,"o","\u001b[19;36H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.262791,"o","\u001b[19;37H\u001b[38;2;255;107;107;48;2;24;27;34mI\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.307928,"o","\u001b[19;38H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.352388,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.398232,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.443557,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.487671,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.53202,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.577814,"o","\u001b[19;44H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.623569,"o","\u001b[19;45H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.667235,"o","\u001b[19;46H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.713722,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34mC\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.758009,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.803316,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.847437,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.892637,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.937528,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.982402,"o","\u001b[19;36H\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.027561,"o","\u001b[19;54H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.072595,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;22H \u001b[2;25H \u001b[2;32H \u001b[2;38H \u001b[3;11H┌───────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├───────┼────────┼─────────────┤\u001b[6;11H│ id │ serial │ PK │\u001b[7;13Htitle\u001b[7;21Ht\u001b[7;23Hxt \u001b[7;30H \u001b[8;11H└───────┴────────┴─────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues"]
|
||||
[11.073108,"o","\u001b[9;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;37H \u001b[10;44H \u001b[11;11H┌────┬──────────────────────┐\u001b[12;11H│ id │ title │\u001b[13;11H├────┼──────────────────────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ 1 │ A Wizard of Earthsea │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[16;46H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[16;53H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;20H \u001b[19;28H \u001b[19;35H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.089401,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[4;13H1 row(s) inserted \u001b[4;42H \u001b[5;11H┌\u001b[5;16H┬\u001b[5;19H─\u001b[5;28H─\u001b[5;39H┐ \u001b[6;16H│\u001b[6;18Htitl\u001b[6;23H \u001b[6;28H \u001b[6;30H \u001b[6;39H│\u001b[6;42H \u001b[7;11H├────┼──────────────────────┤\u001b[7;42H \u001b[8;11H│ 1 │ A Wizard of Earthsea │ \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘ \u001b[9;44H \u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[10;37H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[10;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[12;11H┌────┬──────────────────┐\u001b[12;39H \u001b[13;11H│ id │ title │ \u001b[14;11H├────┼──────────────────┤ \u001b[14;39H \u001b[15;11H│ 2 │ Invisible Cities │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────┘ \u001b[16;38H \u001b[16;46H \u001b[16;53H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.092877,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.096094,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.099392,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.100787,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.261863,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.306581,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.352729,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.398463,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.442154,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.486904,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.533448,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.574106,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.577083,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.621446,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.666238,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.712277,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.758163,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.802233,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.848435,"o","\u001b[19;15H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.892609,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.938105,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[2;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;37H \u001b[3;44H \u001b[4;11H┌────┬──────────────────────┐\u001b[5;11H│ id │ title │\u001b[6;11H├────┼──────────────────────┤\u001b[7;11H│ 1 │ A Wizard of Earthsea │\u001b[8;11H└────┴──────────────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[9;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;37H \u001b[10;44H \u001b[11;11H┌────┬──────────────────┐\u001b[12;11H│ id │ title │\u001b[13;11H├────┼──────────────────┤\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ 2 │ Invisible Cities │\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[19;12H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.942609,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘ \u001b[2;44H \u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[3;37H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[5;11H┌────┬──────────────────┐\u001b[5;39H \u001b[6;11H│ id │ title │ \u001b[7;11H├────┼──────────────────┤ \u001b[7;39H \u001b[8;11H│ 2 │ Invisible Cities │ \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────┘\u001b[9;37H \u001b[9;44H \u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;35H────┐\u001b[12;35H \u001b[12;39H│\u001b[13;35H────┤\u001b[14;14H1\u001b[14;18HA W\u001b[14;22Hzard of Earthsea\u001b[14;39H│\u001b[15;11H│ 2 │ Invisible Cities \u001b[15;39H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.946228,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.949853,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.953526,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.95632,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.437495,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.627404,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mmode\u001b[22;7Hmessages\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.671673,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.720721,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.76424,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mmode\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.806604,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msimple\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34madvanced\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.851691,"o","\u001b[19;7H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madvanced\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.897267,"o","\u001b[19;8H\u001b[38;2;86;182;194;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.942864,"o","\u001b[19;9H\u001b[38;2;86;182;194;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.988799,"o","\u001b[19;10H\u001b[38;2;86;182;194;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.0331,"o","\u001b[19;11H\u001b[38;2;86;182;194;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.077998,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.122932,"o","\u001b[19;13H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.168466,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34madvanced\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.16779,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.360032,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[2;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'Invisible Cities'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;37H \u001b[3;44H \u001b[4;11H┌────┬──────────────────┐\u001b[5;11H│ id │ title │\u001b[6;11H├────┼──────────────────┤\u001b[7;11H│ 2 │ Invisible Cities │\u001b[8;11H└────┴─────────────"]
|
||||
[16.360139,"o","─────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌────┬──────────────────────┐\u001b[11;11H│ id │ title │\u001b[12;11H├────┼──────────────────────┤\u001b[13;11H│ 1 │ A Wizard of Earthsea │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;14H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m2\u001b[14;18HInv\u001b[14;22Hsible Cities \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m "]
|
||||
[16.360194,"o","\u001b[16;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mmode: advanced \u001b[18;1H\u001b[38;2;224;96;96;48;2;24;27;34m╭ \u001b[1m\u001b[38;2;255;158;107;48;2;24;27;34mADVANCED\u001b[22m\u001b[38;2;224;96;96;48;2;24;27;34m ──────────────────────────────────────────────────────────────────────────────╮\u001b[19;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;7H \u001b[19;90H\u001b[38;2;224;96;96;48;2;24;27;34m│\u001b[20;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sid"]
|
||||
[16.360229,"o","ebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.361104,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.747308,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[22;17Hselect\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.791473,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.837769,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.86055,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.881961,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.927327,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.972564,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.017519,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.061914,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.106924,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.152251,"o","\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.197666,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.242135,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.287153,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.33382,"o","\u001b[19;15H\u001b[38;2;255;107;107;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.376629,"o","\u001b[19;12H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.423309,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[2;37H \u001b[2;44H \u001b[3;11H┌────┬──────────────────┐\u001b[4;11H│ id │ title │\u001b[5;11H├────┼──────────────────┤\u001b[6;11H│ 2 │ Invisible Cities │\u001b[7;11H└────┴──────────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌────┬──────────────────────┐\u001b[10;11H│ id │ title │\u001b[11;11H├────┼────"]
|
||||
[18.42343,"o","──────────────────┤\u001b[12;11H│ 1 │ A Wizard of Earthsea │\u001b[13;14H2\u001b[13;18HInv\u001b[13;22Hsible Cities \u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mmode: advanced \u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;255;158;107;48;2;24;27;34m[advanced] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: show\u001b[16;27Hdata\u001b[16;32Hbooks\u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[19;12H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.428704,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m┌────┬──────────────────────┐\u001b[3;11H│ id │ title \u001b[3;39H│\u001b[4;11H├────┼──────────────────────┤\u001b[5;11H│ 1 │ A Wizard of Earthsea\u001b[5;39H│\u001b[6;35H \u001b[6;39H│\u001b[7;35H────┘\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mmode: advanced \u001b[9;2H\u001b[38;2;255;158;107;48;2;24;27;34m[advanced] \u001b[38;2;230;230;230;48;2;24;27;34mshow data books\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;11H\u001b[38;2;139;144;154;48;2;24;27;34mExecuting SQL: \u001b[38;2;199;146;234;48;2;24;27;34mSELECT\u001b[10;33H\u001b[38;2;139;144;154;48;2;24;27;34m*\u001b[10;35H\u001b[38;2;199;146;234;48;2;24;27;34mFROM\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m┌\u001b[11;16H┬\u001b[11;39H┐\u001b[12;13Hid\u001b[12;18Htitle \u001b[12;27H \u001b[12;30H \u001b[13;11H├────┼──────────────────────┤\u001b[14;11H│ 1 │ A Wizard of Earthsea │\u001b[15;11H│ 2 │ Invisible\u001b[15;28HCities\u001b[15;39H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.433612,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.438812,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.443926,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.444844,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.923984,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.915214,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.415214,"o",""]
|
||||
@@ -0,0 +1,262 @@
|
||||
{"version":2,"width":90,"height":26,"timestamp":1781556513,"title":"Save a project, start fresh, then load it back","env":{"SHELL":"/usr/bin/bash","TERM":"tmux-256color"}}
|
||||
[0,"o","\u001b[?1049h"]
|
||||
[0.009452,"o","\u001b[1;1H\u001b[38;2;74;82;101;48;2;24;27;34m╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Output \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[3;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[4;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[5;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[6;"]
|
||||
[0.009512,"o","1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[7;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[8;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[9;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[10;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[11;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[12;1H│\u001b[38;2;230;230;230;48;2;24;27;34"]
|
||||
[0.009582,"o","m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[13;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[14;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[15;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[16;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[17;1H╰─────────────────────────────────────────────────────────────────────────────"]
|
||||
[0.009636,"o","───────────╯\u001b[18;1H╭ \u001b[1m\u001b[38;2;110;196;255;48;2;24;27;34mSIMPLE\u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m ────────────────────────────────────────────────────────────────────────────────╮\u001b[19;1H│\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[20;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[21;1H╭\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m Hint \u001b[22m\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────"]
|
||||
[0.009699,"o","────────────────────────────────────────────╮\u001b[22;1H│\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[23;1H│\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;74;82;101;48;2;24;27;34m│\u001b[24;1H╰────────────────────────────────────────────────────────────────────────────────────────╯\u001b[25;1H\u001b[38;2;139;144;154;48;2;24;27;34mProject: \u001b[1m[TEMP] \u001b[38;2;230;230;230;48;2;24;27;34mLake Quill Cosmic\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;"]
|
||||
[0.009731,"o","34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m complete · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m run \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.011318,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[0.014337,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.032534,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcopy\u001b[22;7Hchange\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.076435,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.122582,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.166431,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.213396,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.258864,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.301174,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;110;196;255;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mm:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.346273,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.390927,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.436712,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.481575,"o","\u001b[19;12H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.526079,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.572043,"o","\u001b[19;14H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.618322,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.660925,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.707507,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.751411,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.79593,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.841165,"o","\u001b[19;20H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.886356,"o","\u001b[19;21H\u001b[38;2;255;107;107;48;2;24;27;34mw\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.945386,"o","\u001b[19;22H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[1.981285,"o","\u001b[19;23H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.025295,"o","\u001b[19;21H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.070144,"o","\u001b[19;25H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.111405,"o","\u001b[19;26H\u001b[38;2;255;107;107;48;2;24;27;34mp\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.158302,"o","\u001b[19;26H\u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.206026,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[2;20H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[2;27Htable\u001b[2;33H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[2;39H\u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[2;44Hpk\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;15H \u001b[19;21H \u001b[19;26H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.220416,"o","\u001b[2;11H\u001b[38;2;199;146;234;48;2;24;27;34mcreate\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtabl\u001b[2;23H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mwith\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mpk\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[2;44H \u001b[3;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks\u001b[4;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌──────┬────────┬─────────────┐\u001b[5;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[5;13HName\u001b[5;18H│\u001b[5;20HType\u001b[5;27H│\u001b[5;29HConstraints\u001b[5;41H│\u001b[6;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├──────┼────────┼─────────────┤\u001b[7;2H\u001b[38;2;159;"]
|
||||
[2.22729,"o","216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[7;13Hid\u001b[7;18H│\u001b[7;20Hserial\u001b[7;27H│\u001b[7;29HPK\u001b[7;41H│\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└──────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.232222,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.894975,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.936352,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[2.986279,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.026567,"o","\u001b[19;5H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mconstraint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34m1:n\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.073971,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mc\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;9H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mconstrai\u001b[22;18Ht\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.116454,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.161288,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;8H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.206697,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.251334,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mm\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.296689,"o","\u001b[19;6H\u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.342311,"o","\u001b[19;12H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.387382,"o","\u001b[19;13H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.43379,"o","\u001b[19;14H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;4H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.477188,"o","\u001b[19;13H\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.521321,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;7H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.566893,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.612863,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.656588,"o","\u001b[19;19H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.702635,"o","\u001b[19;20H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.705839,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.74622,"o","\u001b[19;21H\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mType a name, then `(`\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.791285,"o","\u001b[19;22H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.836474,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.885682,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.926166,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.97121,"o","\u001b[19;26H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.016397,"o","\u001b[19;27H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.061558,"o","\u001b[19;28H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.106183,"o","\u001b[19;29H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mint\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mreal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdecimal\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mbool\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdate\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdatetime\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mblob\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mserial\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mshortid\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.151499,"o","\u001b[19;30H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.196664,"o","\u001b[19;31H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.24428,"o","\u001b[19;32H\u001b[38;2;86;182;194;48;2;24;27;34mx\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.287318,"o","\u001b[19;30H\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.331966,"o","\u001b[19;34H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnot\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34munique\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mdefault\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcheck\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.376374,"o","\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning:\u001b[9;20H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[9;24Hcolumn\u001b[9;31Hto\u001b[9;34H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[9;41H\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[9;47H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;6H \u001b[19;13H \u001b[19;16H \u001b[19;23H \u001b[19;29H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a command — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.392031,"o","\u001b[9;11H\u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;47H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks\u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌───────┬────────┬─────────────┐\u001b[12;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[12;13HName\u001b[12;19H│\u001b[12;21HType\u001b[12;28H│\u001b[12;30HConstraints\u001b[12;42H│\u001b[13;2H\u001b[38;2;"]
|
||||
[4.39328,"o","159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m├───────┼────────┼─────────────┤\u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[14;13Hid\u001b[14;19H│\u001b[14;21Hserial\u001b[14;28H│\u001b[14;30HPK\u001b[14;42H│\u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[15;13Htitle\u001b[15;19H│\u001b[15;21Htext\u001b[15;28H│\u001b[15;42H│\u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.395595,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.401282,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.167688,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mimport\u001b[22;9Hinsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.215259,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnse\u001b[22;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.256539,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.301944,"o","\u001b[19;5H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.350291,"o","\u001b[19;6H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.395643,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.436357,"o","\u001b[19;8H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;4H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.48247,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.526673,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.576286,"o","\u001b[19;11H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.619174,"o","\u001b[19;9H\u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.661377,"o","\u001b[19;13H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.707346,"o","\u001b[19;14H\u001b[38;2;86;182;194;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.752224,"o","\u001b[19;15H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.799926,"o","\u001b[19;16H\u001b[38;2;86;182;194;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.841497,"o","\u001b[19;17H\u001b[38;2;86;182;194;48;2;24;27;34mk\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.878146,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.889288,"o","\u001b[19;18H\u001b[38;2;86;182;194;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.934709,"o","\u001b[19;19H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[38;2;139;144;154;48;2;24;27;34m (\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.977885,"o","\u001b[19;20H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mid\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.026291,"o","\u001b[19;21H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.068327,"o","\u001b[19;22H\u001b[38;2;86;182;194;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.113952,"o","\u001b[19;23H\u001b[38;2;86;182;194;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.160289,"o","\u001b[19;24H\u001b[38;2;86;182;194;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.202482,"o","\u001b[19;25H\u001b[38;2;86;182;194;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.246939,"o","\u001b[19;26H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.291926,"o","\u001b[19;27H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.3373,"o","\u001b[19;28H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.382183,"o","\u001b[19;29H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.428335,"o","\u001b[19;30H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.471946,"o","\u001b[19;31H\u001b[38;2;255;107;107;48;2;24;27;34mu\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.519168,"o","\u001b[19;32H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.563306,"o","\u001b[19;28H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.607288,"o","\u001b[19;34H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.652097,"o","\u001b[19;35H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted string (e.g. 'Alice') or null\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.697142,"o","\u001b[19;36H\u001b[38;2;255;107;107;48;2;24;27;34m'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.743197,"o","\u001b[19;37H\u001b[38;2;255;107;107;48;2;24;27;34mA\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.787663,"o","\u001b[19;38H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.833425,"o","\u001b[19;39H\u001b[38;2;255;107;107;48;2;24;27;34mW\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.877812,"o","\u001b[19;40H\u001b[38;2;255;107;107;48;2;24;27;34mi\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.92365,"o","\u001b[19;41H\u001b[38;2;255;107;107;48;2;24;27;34mz\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.967876,"o","\u001b[19;42H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.013885,"o","\u001b[19;43H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.058029,"o","\u001b[19;44H\u001b[38;2;255;107;107;48;2;24;27;34md\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.103192,"o","\u001b[19;45H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.147679,"o","\u001b[19;46H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.192796,"o","\u001b[19;47H\u001b[38;2;255;107;107;48;2;24;27;34mf\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.237869,"o","\u001b[19;48H\u001b[38;2;255;107;107;48;2;24;27;34m \u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mfor `title`: Type a quoted s\u001b[22;31Hring (e.g.\u001b[22;42H'Alice') or null\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.283032,"o","\u001b[19;49H\u001b[38;2;255;107;107;48;2;24;27;34mE\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mafter `insert into books (ti\u001b[22;31Hle) values\u001b[22;42H(`, expected string literal or `null` — usage:\u001b[23;2Hinsert into <Table> [(<col>[, ...])] [values] (<value>[, ...])\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.327505,"o","\u001b[19;50H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.373231,"o","\u001b[19;51H\u001b[38;2;255;107;107;48;2;24;27;34mr\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.4182,"o","\u001b[19;52H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.463382,"o","\u001b[19;53H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.508137,"o","\u001b[19;54H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.5532,"o","\u001b[19;55H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.598749,"o","\u001b[19;56H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.643158,"o","\u001b[19;36H\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mNext:\u001b[22;9H)`\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[23;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.688071,"o","\u001b[19;58H\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.733219,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;18H \u001b[2;24H \u001b[2;30H \u001b[2;35H \u001b[3;11H┌──────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├──────┼────────┼─────────────┤\u001b[6;11H│ id │ serial │ PK │\u001b[7;11H└──────┴────────┴─────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27"]
|
||||
[7.733284,"o",";34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[9;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[9;22H \u001b[9;25H \u001b[9;32H \u001b[9;38H \u001b[10;11H┌───────┬────────┬─────────────┐\u001b[11;11H│ Name │ Type │ Constraints │\u001b[12;11H├───────┼────────┼─────────────┤\u001b[13;11H│ id │ serial │ PK │\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;13H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mtitle\u001b[14;21Ht\u001b[14;23Hxt \u001b[14;30H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;"]
|
||||
[7.733348,"o","2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[16;46H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[16;53H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[19;2H\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[19;9H \u001b[19;14H \u001b[19;20H \u001b[19;28H \u001b[19;35H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.75304,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34madd\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mcolumn\u001b[2;22Hto\u001b[2;25H\u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;139;144;154;48;2;24;27;34m:\u001b[2;32H\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[2;38H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;240;143;192;48;2;24;27;34mtext\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;11H\u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[4;11H┌───────┬────────┬─────────────┐\u001b[5;11H│ Name │ Type │ Constraints │\u001b[6;11H├───────┼────────┼─────────────┤\u001b[7;11H│ id │ serial │ PK │\u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m│ title │ text │ \u001b[8;32H \u001b[8;38H │ \u001b[9;11H└───────┴────────┴─────────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[10;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[11;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;13H1 row(s) inserted \u001b[11;42H \u001b[12;11H┌\u001b[12;16H┬\u001b[12;19H─\u001b[12;28H─\u001b[12;39H┐ \u001b[13;16H│\u001b[13;18Htitl\u001b[13;23H \u001b[13;28H \u001b[13;30H \u001b[13;39H│\u001b[13;42H \u001b[14;11H├────┼──────────────────────┤\u001b[14;42H \u001b[15;11H│ 1 │ A Wizard of Earthsea │ \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m└────┴──────────────────────┘ \u001b[16;46H \u001b[16;53H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.756529,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.759874,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.762592,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.623623,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.66809,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.712302,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.761256,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.803216,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.847318,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mt\u001b[22;4Hble\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.892684,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.93714,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.982301,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.027984,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.072634,"o","\u001b[19;12H\u001b[38;2;199;146;234;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.117525,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mbooks \u001b[2;22H \u001b[2;25H \u001b[2;32H \u001b[2;38H \u001b[3;11H┌───────┬────────┬─────────────┐\u001b[4;11H│ Name │ Type │ Constraints │\u001b[5;11H├───────┼────────┼─────────────┤\u001b[6;11H│ id │ serial │ PK │\u001b[7;13Htitle\u001b[7;21Ht\u001b[7;23Hxt \u001b[7;30H \u001b[8;11H└───────┴────────┴─────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues"]
|
||||
[9.117608,"o","\u001b[9;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[10;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[10;37H \u001b[10;44H \u001b[11;11H┌────┬──────────────────────┐\u001b[12;11H│ id │ title │\u001b[13;11H├────┼──────────────────────┤\u001b[14;11H│ 1 │ A Wizard of Earthsea │\u001b[15;11H└────┴──────────────────────┘\u001b[16;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunning: \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.120952,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m│ Name\u001b[2;19H│\u001b[2;21HType\u001b[2;28H│\u001b[2;30HConstraints\u001b[2;42H│\u001b[3;11H├\u001b[3;19H┼\u001b[3;28H┼\u001b[3;42H┤\u001b[4;13Hid \u001b[4;21Hserial\u001b[4;30HPK \u001b[5;11H│ title │ text │ │\u001b[6;11H└───────┴────────┴─────────────┘\u001b[7;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[7;37H\u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[7;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[8;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[9;2H\u001b[38;2;159;216;145;48;2;24"]
|
||||
[9.120995,"o",";27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m┌────┬──────────────────────┐ \u001b[9;44H \u001b[10;11H│\u001b[10;13Hid │ title \u001b[10;39H│\u001b[11;11H├\u001b[11;16H┼\u001b[11;39H┤\u001b[12;13H 1\u001b[12;18HA Wizard\u001b[12;27Hof\u001b[12;30HEarthsea\u001b[13;11H└\u001b[13;16H┴\u001b[13;39H┘\u001b[14;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[14;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;27H \u001b[14;30H \u001b[14;39H \u001b[15;11HTables (1): \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m books \u001b[16;20H \u001b[16;25H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.12404,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.127271,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.130379,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.13175,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.618348,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.208387,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.253176,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;6H\u001b[27m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.298182,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mv\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.342215,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.388293,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mas\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.433176,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.479165,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mas\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.522998,"o","\u001b[9;11H\u001b[38;2;230;230;230;48;2;24;27;34m╭\u001b[1m Save as \u001b[9;39H\u001b[22m─────────────────────────────────────────╮\u001b[10;13H \u001b[10;16H \u001b[10;18H \u001b[10;39H \u001b[10;80H│\u001b[11;11H│Name (under data dir/projects)\u001b[11;43Hor\u001b[11;46Habsolute\u001b[11;55Hpath:\u001b[11;80H│\u001b[12;14H \u001b[12;16H \u001b[12;18H \u001b[12;20H \u001b[12;27H \u001b[12;30H \u001b[12;39H \u001b[12;80H│\u001b[13;11H│> █ \u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│ \u001b[14;16H \u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[1mEnter\u001b[15;18H\u001b[22mconfirm\u001b[15;28H\u001b[38;2;139;144;154;48;2;24;27;34mEsc cancel\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[16;13H \u001b[16;80H│\u001b[17;11H╰───────────────────────────────────────────────"]
|
||||
[11.52308,"o","─────────────────────╯\u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.523688,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.712429,"o","\u001b[13;14H\u001b[38;2;230;230;230;48;2;24;27;34ml█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.758108,"o","\u001b[13;15H\u001b[38;2;230;230;230;48;2;24;27;34mi█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.802914,"o","\u001b[13;16H\u001b[38;2;230;230;230;48;2;24;27;34mb█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.84755,"o","\u001b[13;17H\u001b[38;2;230;230;230;48;2;24;27;34mr█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.892817,"o","\u001b[13;18H\u001b[38;2;230;230;230;48;2;24;27;34ma█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.938699,"o","\u001b[13;19H\u001b[38;2;230;230;230;48;2;24;27;34mr█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.982784,"o","\u001b[13;20H\u001b[38;2;230;230;230;48;2;24;27;34my█\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.023504,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m│ \u001b[14;80H│ \u001b[15;80H│ \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.983199,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.583339,"o","\u001b[9;11H\u001b[38;2;230;230;230;48;2;24;27;34m┌────┬────\u001b[9;39H┐ \u001b[10;13Hid\u001b[10;16H│\u001b[10;18Htitle\u001b[10;39H│\u001b[10;80H \u001b[11;11H├────┼──────────────────────┤ \u001b[11;43H \u001b[11;46H \u001b[11;55H \u001b[11;80H \u001b[12;14H1\u001b[12;16H│\u001b[12;18HA\u001b[12;20HWizard\u001b[12;27Hof\u001b[12;30HEarthsea\u001b[12;39H│\u001b[12;80H \u001b[13;11H└────┴──────────────────────┘\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[14;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mTables\u001b[15;18H(1): \u001b[15;28H \u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[16;13Hbooks\u001b[16;80H \u001b[17;11H\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────────────────────────────────────\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.586771,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m├───────┼────────┼─────────────┤\u001b[3;11H│ id │ serial │ PK │\u001b[4;13Htitle\u001b[4;21Ht\u001b[4;23Hxt \u001b[4;30H \u001b[5;11H└───────┴────────┴─────────────┘\u001b[6;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[6;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[7;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[7;37H \u001b[7;44H \u001b[8;11H┌────┬──────────────────────┐\u001b[9;11H│ id │ title │\u001b[10;11H├────┼──────────────────────┤\u001b[11;11H│ 1 │ A Wizard of Earthsea │\u001b[12;11H└────┴──────────────────────┘\u001b[13;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mTables (1): \u001b[15;11H \u001b[15;14Hooks \u001b[16;11H[ok] now\u001b[16;20Hediting:\u001b[16;29HLibrary\u001b[25;10H\u001b[1mLibrary\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.589881,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.593034,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.596086,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.597453,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.084422,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.262361,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34mn\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mnew\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.308139,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34me\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.35287,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mnew\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.353905,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.579036,"o","\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.583686,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m│ id │ serial │ PK │\u001b[3;13Htitle\u001b[3;21Ht\u001b[3;23Hxt \u001b[3;30H \u001b[4;11H└───────┴────────┴─────────────┘\u001b[5;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[5;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[6;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[6;37H \u001b[6;44H \u001b[7;11H┌────┬────────────────"]
|
||||
[17.583777,"o","──────┐\u001b[8;11H│ id │ title │\u001b[9;11H├────┼──────────────────────┤\u001b[10;11H│ 1 │ A Wizard of Earthsea │\u001b[11;11H└────┴──────────────────────┘\u001b[12;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[13;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mTables (1): \u001b[14;11H \u001b[14;14Hooks \u001b[15;11H[ok] now\u001b[15;20Hediting:\u001b[15;29HLibrary\u001b[16;29HR\u001b[16;31Hpple Peaceful\u001b[16;45HCrystal\u001b[25;10H\u001b[1m\u001b[38;2;139;144;154;48;2;24;27;34m[TEMP] \u001b[38;2;230;230;230;48;2;24;27;34mRipple Peaceful Crystal\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.588092,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.592232,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.596297,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.596059,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.07839,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.133681,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.17822,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.222712,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.267862,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.31421,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.35721,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mt\u001b[22;4Hble\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.402906,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.448324,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.494085,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.538058,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.583159,"o","\u001b[19;12H\u001b[38;2;199;146;234;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.62828,"o","\u001b[2;13H\u001b[38;2;230;230;230;48;2;24;27;34mtitle\u001b[2;21Ht\u001b[2;23Hxt \u001b[2;30H \u001b[3;11H└───────┴────────┴─────────────┘\u001b[4;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[4;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[5;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[5;37H \u001b[5;44H \u001b[6;11H┌────┬──────────────────────┐\u001b[7;11H│ id │ title "]
|
||||
[19.628334,"o"," │\u001b[8;11H├────┼──────────────────────┤\u001b[9;11H│ 1 │ A Wizard of Earthsea │\u001b[10;11H└────┴──────────────────────┘\u001b[11;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[12;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mTables (1): \u001b[13;11H \u001b[13;14Hooks \u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m[ok] now\u001b[14;20Hediting:\u001b[14;29HLibrary\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;29H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mR\u001b[15;31Hpple Peaceful\u001b[15;45HCrystal\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunni\u001b[16;17Hg:\u001b[16;20"]
|
||||
[19.6284,"o","H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[16;36H \u001b[16;45H \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.632763,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m└───────┴────────┴─────────────┘\u001b[3;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[3;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[4;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[4;37H \u001b[4;44H \u001b[5;11H┌────┬──────────────────────┐\u001b[6;11H│ id │ title │\u001b[7;11H├────┼──────────────────────┤\u001b[8;11H│ 1 │ A Wizard of Earthsea │\u001b[9;11H└────┴──────────────────────┘\u001b[10;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mTables (1): \u001b[12;11H \u001b[12;14Hooks \u001b[13;11H[ok] now\u001b[13;20Hediting:\u001b[13;29HLibrary\u001b[14;29HR\u001b[14;31Hpple Peaceful\u001b[14;45HCrystal\u001b[15;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[15;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[15;29H \u001b[15;36H \u001b[15;45H \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mNo tables in this project\u001b[16;37Hyet.\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.635933,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.639083,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.642551,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.643688,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.129593,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.9188,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mload\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.963805,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.007412,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.053397,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mload\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.098416,"o","\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;80H [ENTER] \u001b[15;80H \u001b[19;2H\u001b[22m\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[27m \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.102735,"o","\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m╭\u001b[1m Load project \u001b[22m──────────────────────────────────────────────────────╮\u001b[5;11H│ \u001b[5;80H│\u001b[6;12H\u001b[1m › [TEMP] Ripple Peaceful Crystal 2026-06-15 20:48\u001b[6;80H\u001b[22m│\u001b[7;11H│ Library 2026-06-15 20:48\u001b[7;80H│\u001b[8;14H [TEMP] L\u001b[8;24Hke\u001b[8;27HQuill Co\u001b[8;36Hmic \u001b[8;42H2026-06-15\u001b[8;53H20:48\u001b[8;80H│\u001b[9;11H│ \u001b[9;80H│\u001b[10;11H│\u001b[1m↑↓\u001b[22m select \u001b[1mEnter\u001b[10;30H\u001b[22mload\u001b[10;37H\u001b[1mb\u001b[10;39H\u001b[22mbrowse\u001b[10;46Hpath\u001b[10;53H\u001b[38;2;139;144;154;48;2;24;27;34mEsc cancel\u001b[10;80H\u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[11;11H│ \u001b[11;18H \u001b[11;80H│\u001b[12;11H│\u001b[12;13H \u001b[12;80H│\u001b[13;11H│ \u001b[13;16H \u001b[13;20H \u001b[13;29H \u001b[14;11H│ \u001b[14;16H \u001b[14;20H \u001b[14;29H \u001b[14;36H \u001b[14;45H \u001b[15;11H│ \u001b[15;16H \u001b[16;11H│ \u001b[16;14H \u001b[16;"]
|
||||
[22.102806,"o","21H \u001b[16;24H \u001b[16;29H \u001b[16;37H \u001b[16;80H│\u001b[17;11H│ │\u001b[18;11H│ │\u001b[19;11H│\u001b[19;80H│\u001b[20;11H│ │\u001b[21;11H│ │\u001b[22;11H│ │\u001b[23;11H╰────────────────────────────────────────────────────────────────────╯\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.105683,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.489013,"o","\u001b[6;12H\u001b[38;2;230;230;230;48;2;24;27;34m [TEMP] Ripple Peaceful Crystal 2026-06-15 20:48\u001b[7;12H\u001b[1m › Library 2026-06-15 20:48\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.599785,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m│ \u001b[14;80H│ \u001b[15;80H│ \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.490117,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.68705,"o","\u001b[4;11H\u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[5;11H┌────┬──────────────────────┐\u001b[5;80H \u001b[6;13Hid │ title \u001b[6;29H \u001b[6;38H │ \u001b[6;48H \u001b[6;59H \u001b[6;80H \u001b[7;11H├────┼──────────────────────┤ \u001b[7;80H \u001b[8;14H1 │ A Wiz\u001b[8;24Hrd\u001b[8;27Hof Earth\u001b[8;36Hea │\u001b[8;42H \u001b[8;53H \u001b[8;80H \u001b[9;11H└────┴──────────────────────┘\u001b[9;80H \u001b[10;11H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;30H \u001b[10;37H \u001b[10;39H \u001b[10;46H \u001b[10;53H \u001b[10;80H \u001b[11;11HTables\u001b[11;18H(1):\u001b[11;80H \u001b[12;11H \u001b[12;13Hbooks\u001b[12;80H \u001b[13;11H[ok]\u001b[13;16Hnow\u001b[13;20Hediting:\u001b[13;29HLibrary\u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m[ok]\u001b[14;16Hnow\u001b[14;20Hediting:\u001b[14;29HRipple\u001b[14;36HPeaceful\u001b[14;45HCrystal\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[15;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34mNo\u001b[16;14Htables\u001b[16;21Hin\u001b[16;24Hthis\u001b[16;29Hproject\u001b[16;37Hyet.\u001b[16;80H \u001b[17;11H\u001b[38;2;74;82;101;48;2;24;27;34m──────────────────────────────────────────────────────────────────────\u001b[18;11H──────────────────────────────────────────────────────────────────────\u001b[19;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;80H \u001b[20;11H\u001b[38;2;74;82;101;48;2;24;27;34m────────"]
|
||||
[24.687117,"o","──────────────────────────────────────────────────────────────\u001b[21;11H──────────────────────────────────────────────────────────────────────\u001b[22;11H\u001b[38;2;139;144;154;48;2;24;27;34mmmand — press Tab for options, `help` for a list · `mode advanced` for\u001b[23;11H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.690134,"o","\u001b[2;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34minsert\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34minto\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;86;182;194;48;2;24;27;34mbooks\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;86;182;194;48;2;24;27;34mtitle\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mvalues\u001b[2;44H\u001b[38;2;139;144;154;48;2;24;27;34m(\u001b[38;2;195;232;141;48;2;24;27;34m'A Wizard of Earthsea'\u001b[38;2;139;144;154;48;2;24;27;34m)\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[3;2H[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[3;37H \u001b[3;44H \u001b[4;11H┌────┬──────────────────────┐\u001b[5;11H│ id │ title │\u001b[6;11H├────┼──────────────────────┤\u001b[7;11H│ 1 │ A Wizard of Earthsea │\u001b[8;11H└────┴──────────────────────┘\u001b[9;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[10;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mTables (1): \u001b[11;11H \u001b[11;14Hooks \u001b[12;11H[ok] now\u001b[12;20Hediting:\u001b[12;29HLibrary\u001b[13;29HR\u001b[13;31Hpple Peaceful\u001b[13;45HCrystal\u001b[14;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[14;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;29H \u001b[14;36H \u001b[14;45H \u001b[15;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mNo tables in this\u001b[15;29Hproject\u001b[15;37Hyet.\u001b[16;11H[\u001b[16;13Hk] now editing:\u001b[16;29HLibrary\u001b[16;37H \u001b[25;10H\u001b[1mLibrary\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.692736,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.695479,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.698078,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.703269,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.191274,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.567384,"o","\u001b[19;2H\u001b[38;2;255;107;107;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34msave\u001b[22;7Hshow\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mseed\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[26;1H\u001b[1mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint · \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEsc\u001b[26;17H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mclear \u001b[26;24H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-A/E\u001b[26;36H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mhome/end ·\u001b[26;48H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-W\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m del\u001b[26;60Hword · \u001b[26;69H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;75H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.613605,"o","\u001b[19;3H\u001b[38;2;255;107;107;48;2;24;27;34mh\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;3H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mhow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.662691,"o","\u001b[19;4H\u001b[38;2;255;107;107;48;2;24;27;34mo\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.703119,"o","\u001b[19;2H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.748147,"o","\u001b[19;6H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[7m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mdata\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationships\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindexes\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mrelationship\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mindex\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.792354,"o","\u001b[19;7H\u001b[38;2;255;107;107;48;2;24;27;34mt\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;199;146;234;48;2;24;27;34mt\u001b[22;4Hble\u001b[38;2;139;144;154;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.84022,"o","\u001b[19;8H\u001b[38;2;255;107;107;48;2;24;27;34ma\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.886742,"o","\u001b[19;9H\u001b[38;2;255;107;107;48;2;24;27;34mb\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.931728,"o","\u001b[19;10H\u001b[38;2;255;107;107;48;2;24;27;34ml\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.976264,"o","\u001b[19;7H\u001b[38;2;199;146;234;48;2;24;27;34mtable\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.018459,"o","\u001b[19;12H\u001b[38;2;199;146;234;48;2;24;27;34ms\u001b[7m\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[22;2H\u001b[27m\u001b[38;2;139;144;154;48;2;24;27;34mSubmit with Enter\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.063137,"o","\u001b[2;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m 1 row(s) inserted \u001b[2;37H \u001b[2;44H \u001b[3;11H┌────┬──────────────────────┐\u001b[4;11H│ id │ title │\u001b[5;11H├────┼──────────────────────┤\u001b[6;11H│ 1 │ A Wizard of Earthsea │\u001b[7;11H└────┴──────────────────────┘\u001b[8;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[9;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mTables (1): \u001b[10;11H \u001b[10;14Hooks \u001b[11;11H[ok] now\u001b[11;20Hediting:\u001b[11;29HLibrary\u001b[12;29HR\u001b[12;31Hpple Peaceful\u001b[12;45HCrystal\u001b[13;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] "]
|
||||
[27.063221,"o","\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[13;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[13;29H \u001b[13;36H \u001b[13;45H \u001b[13;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[14;2H\u001b[22m\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34mNo tables in this\u001b[14;29Hproject\u001b[14;37Hyet.\u001b[14;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m [ENTER] \u001b[15;11H\u001b[22m\u001b[38;2;230;230;230;48;2;24;27;34m[\u001b[15;13Hk] now editing:\u001b[15;29HLibrary\u001b[15;37H \u001b[15;80H\u001b[1m\u001b[38;5;0;48;2;255;215;0m \u001b[16;2H\u001b[22m\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;230;230;230;48;2;24;27;34mrunni\u001b[16;17Hg:\u001b[16;20H\u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[19;2H\u001b[7m \u001b[27m \u001b[19;7H \u001b[22;2H\u001b[38;2;139;144;154;48;2;24;27;34mType a\u001b[22;9Hcommand — press Tab for options, `help` for a list · `mode advanced` for SQL\u001b[26;1H\u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mCtrl-O\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m sidebar \u001b[26;17H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mTab\u001b[26;24H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mcomplete ·\u001b[26;36H \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34m↑\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m history \u001b[26;48H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mF1\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34m hint \u001b[26;60H· \u001b[1m\u001b[38;2;230;230;230;48;2;24;27;34mEnter\u001b[26;69H\u001b[22m\u001b[38;2;139;144;154;48;2;24;27;34mrun \u001b[26;75H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.066191,"o","\u001b[2;11H\u001b[38;2;230;230;230;48;2;24;27;34m│\u001b[2;13Hid │ title \u001b[2;39H│\u001b[3;11H├\u001b[3;16H┼\u001b[3;39H┤\u001b[4;13H 1\u001b[4;18HA Wizard\u001b[4;27Hof\u001b[4;30HEarthsea\u001b[5;11H└\u001b[5;16H┴\u001b[5;39H┘\u001b[6;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[6;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[6;27H \u001b[6;30H \u001b[6;39H \u001b[7;11HTables (1): \u001b[8;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m books \u001b[9;11H[ok] now editing:\u001b[9;29HLibrary\u001b[10;11H[ok] now\u001b[10;20Hediting:\u001b[10;29HRipple\u001b[10;36HPeaceful\u001b[10;45HCrystal\u001b[11;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[11;16Htables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[11;29H \u001b[12;11HN\u001b[12;13H tables in this\u001b[12;29Hproject yet. \u001b[12;45H \u001b[13;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m[ok]\u001b[13;16Hnow editing:\u001b[13;29HLibrary\u001b[14;2H\u001b[38;2;110;196;255;48;2;24;27;34m[simple] \u001b[38;2;199;146;234;48;2;24;27;34mshow\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[38;2;199;146;234;48;2;24;27;34mtables\u001b[38;2;159;216;145;48;2;24;27;34m ✓\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;29H \u001b[14;37H \u001b[15;11HTables (1): \u001b[15;29H \u001b[16;2H\u001b[38;2;159;216;145;48;2;24;27;34m[system] \u001b[38;2;230;230;230;48;2;24;27;34m books \u001b[16;20H \u001b[16;25H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.069236,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.071811,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.07448,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.077453,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.563884,"o","\u001b[13;80H\u001b[38;2;230;230;230;48;2;24;27;34m \u001b[14;80H \u001b[15;80H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.356019,"o","\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.856019,"o",""]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user