このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

SQLエディタ

SQLクエリーを実行する

接続中のサーバに対してSQLを書いて実行します。

場所: SQLエディタ › 実行 (⌘↩)

テキストエディタにSQL文を入力します。「実行」(再生アイコン)を押すか、ショートカット⌘↩で実行します。テキストを選択している場合は、選択した部分だけが実行されます。

結果は下部の表に行と列で表示されます。実行時間と行数はステータスバーに表示されます。

結果の行数が「行数の上限」(「設定」›「テキストエディタ」›「結果」)を超えると、エディタは最初の行だけを残し、バーに「少なくともM行のうちN行を表示」と表示され、その横に「すべて取得」が出ます。上限は巨大な結果をメモリーに載せないためのもので、0は上限なしを意味します。

文が失敗した場合、結果タブにはサーバが送ったテキストがそのまま表示されます。

MySQLMariaDBAuroraTiDB

MySQLとMariaDBでは、そのあとにエラー番号とSQLSTATEが続きます:Table 'demo.x' doesn't exist (error 1146, SQLSTATE 42S02)。

TiDB

TiDBは、どの行と列で止まったかも伝えます(line 1 column 15 near "FROM x")。エディタはその語を選択し、ステータスバーにはエディタのテキストで数えた「L行、C列」が加わります。MySQLとMariaDBが返すのは行だけで、印は付きません。

PostgreSQL

PostgreSQLでは、サーバのメッセージ、詳細、ヒントがこの順に「 — 」でつながって表示されます。

Oracle

Oracleでは、番号付きのサーバのテキストです:ORA-00942: table or view "DEMO"."NO_EXISTE" does not exist。サーバが文のどこでエラーになったかを伝えた場合、エディタはその語を選択し、ステータスバーにはエディタのテキストで数えた「L行、C列」が加わります。

MySQLMariaDBAurora

行を返すプロシージャへのCALLは、SELECTと同じように行を表示します。複数の結果セットを返す場合、タブには最後のものが残ります。

MySQLMariaDBAuroraPostgreSQLOracle

サーバからの警告。文は成功してもサーバが警告を残した場合(格納時に切り詰められた値、型の変換、何も見つからなかったDROP … IF EXISTSなど)、結果の上に三角形付きの「サーバからの警告N件」の行が表示されます。クリックまたはタップすると展開され、1行に1件ずつ「レベル(コード):テキスト」の形で表示され、テキストは選択できます。Mac、iPad、iPhone、Apple Vision Proで同じように動作します。

MySQLMariaDBAurora

Calíopeは同じ接続で、次の文を送る前にSHOW WARNINGSで警告を取得します。サーバがまだ警告を保持しているのはその間だけだからです。

PostgreSQL

PostgreSQLでは、サーバが応答と一緒に送るWARNINGとNOTICEのメッセージ(関数のRAISE WARNING、ANALYZE VERBOSEのINFOの行など)がそれにあたり、コードはSQLSTATEです。こちらから問い合わせるものはありません。

Oracle

Oracleでの典型的な警告は、エラー付きで作成されたプロシージャ、関数、パッケージ、トリガーです。文は完了しますがオブジェクトは無効のまま残り、全体の警告に加えて、ALL_ERRORSの各エラーが行と位置付きでそれぞれ1件の警告として届きます。SQL*PlusのSHOW ERRORSと同じです。

MySQLMariaDBAurora

LOAD DATA LOCAL INFILE。文がこのデバイス上のファイルを求めても、Calíopeは自分では読みません。ファイルを選ぶ画面を開き、そこで選んだファイルだけをサーバに送ります。文に書かれたパスは送りません。あれは提案にすぎません。Macでは「開く」パネルで「送信」、iPad、iPhone、Apple Vision Proではシートで「ファイルを選択…」と「何も送信しない」です。キャンセルすると何も送られず、文は「ファイルは送信されませんでした」で失敗します。サーバではlocal_infileがオンになっている必要があります。オフで出荷されるサーバもあり、その場合はエラーがそう伝えます。オンにするのはサーバの管理者です。

Oracle

Oracleは空文字列とNULLを区別しません。''はNULLとして格納され、NULLとして読み戻されます。バインドされた値として送った場合も同じです。

キーワード: 実行、クエリー、結果、再生、警告、SHOW WARNINGS、NOTICE、LOAD DATA LOCAL INFILE、local_infile、CALL、プロシージャ、サーバエラー

実行中のクエリーを停止する

時間がかかりすぎている文を、接続を閉じずに止めます。

場所: SQLエディタ › 停止

「停止」ボタンは、実行が進行中のあいだ、SQLエディタのバーの「実行」の隣に表示されます。macOSでは⌘.(Command+ピリオド)にも反応します。

文をどう止めるかはエンジンによって異なりますが、どのエンジンでも接続は生きたままです。

- 複数の文からなるスクリプトでは、実行中の文が止まり、残りの文は送られません。
- 特別な権限は不要です。どのユーザも自分のクエリーを止められます。
- 終わると、ステータスバーに「クエリーを停止しました」と表示されます。

MySQLMariaDBAuroraTiDB

実際に行うこと。MySQLとMariaDBは、クエリーを待っている接続そのものではそのクエリーを中断できません。そこでCalíopeは別の接続を開き、それを実行しているセッションに対してKILL QUERY <id>を送ります。「プロセス」ツールが提供するのと同じ操作を、自動的に自分のクエリーに向けたものです。

KILL CONNECTIONではなくKILL QUERYを使います。文は中断されますが接続は生きたままなので、再接続するものはなく、開いているトランザクションも失われず、セッションの一時テーブルも消えません。サーバが返すQuery execution was interruptedエラーは失敗としては表示されません。想定どおりの応答だからです。

制限。要求にいつ応じられるかはサーバが決めます。長いSELECTはほぼすぐに切れますが、すでにストレージエンジンの中にある操作(テーブルをコピーしているALTER TABLE、進行中のロールバックなど)は手放すまでしばらくかかることも、まったく手放さないこともあります。その場合、アプリは待つのをやめていても、文はサーバ上でまだ生きています。「プロセス」ツールに表示されます。

TiDB

TiDBでは、セッションのidが64ビットになることがあり(32ビットのものが尽きたとき)、接続時のあいさつにはその半分しか入っていません。Calíopeは接続を初めて使うときにCONNECTION_ID()を問い合わせ、その番号でKILL QUERYを送ります。TiDBにも同じ接続でのKILLはありません。

SQL Server

SQL Serverでは同じ接続で行います。Calíopeはプロトコルのキャンセル信号(ATTENTION)を送り、接続は生きたまま接続プールに戻ります。SQL ServerのKILLはセッション全体を閉じてしまうので、使いません。

PostgreSQL

PostgreSQLでは、Calíopeはプロトコル独自のキャンセル要求(CancelRequest)を別の接続で送ります(プロファイルがSSHトンネルを使っていればトンネル経由で)。キーは、そのセッションが開いたときにサーバが渡したものです。権限は不要で、pg_cancel_backendは使わず、接続は生きたままです。サーバはcanceling statement due to user request(57014)と答えますが、失敗としては表示されません。MySQLとの違いが1つあります。止めた文がトランザクションの中にあった場合、PostgreSQLはそのトランザクションを失敗とし、ROLLBACKまではほかに何も受け付けません。

ClickHouse

ClickHouseでは、Calíopeはクエリーの識別子を付けて別のリクエストでKILL QUERY … SYNCを送り、クエリーはサーバから消えます。実行中は「停止」の隣に読み込んだ量(行数とバイト数、サーバが総量を把握していればパーセント)が表示されます。system.processesから0.25秒ごとに読み取ったもので、同じ数値がアクティビティセンターにも表示され、そこの「停止」でも止められます。ClickHouseのクエリーは30秒で勝手に切れることはありません。終わらせるのはサーバの上限(max_execution_time)か「停止」です。

Oracle

Oracleでは同じ接続で行います。Calíopeはプロトコル独自の割り込みを送り、サーバはORA-01013で文を切ります。これは失敗としては表示されません。接続は生きたまま接続プールに戻り、権限もALTER SYSTEM CANCEL SQLも不要です。テスト用サーバでの測定結果:all_objectsの直積は「停止」から1秒未満で止まりました。実行中は進捗の数値は出ません。Oracleはすべてのクエリーについてそれを返すわけではないからです。

キーワード: 停止、キャンセル、KILL、KILL QUERY、中断、割り込み、スロークエリー、応答なし、⌘.、止める

エディタと結果を消去する

エディタの内容と結果の表を消去します。

場所: SQLエディタ › 消去

SQLエディタのツールバーにある「消去」ボタンを押すと、エディタのテキストと表示中の結果の両方が消去されます。クエリー履歴には影響しません。

キーワード: 消去、削除、エディタを空にする、空、リセット

SQLを整形する

エディタのSQLにインデントを付け、読みやすい形にします。

場所: SQLエディタ › 整形 (⇧⌘F)

「整形」ボタン(またはショートカット⇧⌘F)は、エディタのSQLを正しいインデントと句ごとの改行で整形し直します。詰まったスクリプトや自動生成されたスクリプトを読むときに便利です。キーワードが大文字で書かれるのは、「設定」で「整形時にSQLキーワードを大文字にする」をオンにしている場合だけで、デフォルトではオフです。オフなら書いたとおりの大文字・小文字が保たれます。オンでも、大文字にするのは名前になりえないものだけです(セッションのエンジンの予約語、クエリーの形を決める語、括弧が続く型と関数)。name、status、pathという名前の列は書いたとおりのままです。

キーワード: 整形、清書、インデント、大文字

クエリーを壊すカーリーな引用符

エディタの下に「修正」の通知が表示される理由と、その働き。

場所: ワークスペース › ツール › SQLエディタ

SQLが理解するのはストレートな引用符だけです。文字列には'、一部のモードでは識別子に"を使います。カーリーな引用符(‘ ’ “ ” « » „ “)は別の文字で、画面では正しく見えても、サーバは構文エラーで文を拒否します。等幅フォントでは、'と‘を見分けるのはとても難しいのです。

Calíopeはこれを書くことはありません。現れるのは、入力中に引用符を置き換えるメモ、メール、チャットからSQLをペーストしたときです。アプリの中では置き換えはすべてのエディタでオフになっているので、ここで入力したものは常にストレートな引用符になります。

SQLが区切りを期待する場所でエディタがこうした引用符を見つけると、「修正」ボタン付きの通知が表示されます。変えるのは、ほかのものではありえないものだけです。文字列の中のカーリーな引用符はデータの正当な文字なので('d’Artagnan'のように)、そのままにします。どれが誤りかはっきりしない場合は、何も変えず、通知も表示されません。

キーワード: 引用符、クォート、カーリー、スマートクォート、ストレート、アポストロフィ、構文エラー、1064、ペースト、修正

セーフモード

データや構造を変更する文をブロックします。デフォルトでオンです。

場所: SQLエディタ › セーフモード

セーフモードは、macOS、iPad、iPhone、Apple Vision Proでデフォルトでオンです。オンのあいだ、CalíopeはALTER、CREATE、DELETE、DROP、GRANT、TRUNCATE、UPDATE、REPLACE、RENAMEのいずれかを含む文を実行しません。サーバに何かを送る前に止まり、どの語が見つかったかを伝えます。受け入れる確認はありません。実行するには、セーフモードをオフにします。

探すのは語であって、文が何をするかではありません。WHERE付きのUPDATEも、付いていないものと同じようにブロックされます。スクリプトを実行し、そのうち1つの文がブロック対象の語を含んでいれば、スクリプトの何も実行されません。

対象はエディタタブで書くもの、つまり「実行」、「ターミナル」パネル、「SQLプレーヤー」です。結果から行を削除したときのDELETEのように、Calíope自身が生成するものはこれを通りません。プレーヤーでは、ブロックされた文より前の文はすでに実行されています。そこで止まります。

SQLエディタのツールバーにある「セーフモード」スイッチ(鍵のアイコン)でオン・オフを切り替えます。状態は接続プロファイルごとに、その中ではエディタタブごとに保存されます。

本番環境で作業するときや、うっかりした変更から守られたいSQLの学習者に便利です。

環境タグがある場合:セーフモードは変わらず、先に働きます。セーフモードがブロックしたものは、タグの確認や拒否まで届きません。トピック「保護レベル」で説明しています。

キーワード: セーフモード、ロック、保護、DROP、DELETE、デフォルト、破壊的

トランザクション

「トランザクション」メニューからBEGIN、COMMIT、ROLLBACK。タブ専用の接続を使います。

場所: SQLエディタ › 「トランザクション」メニュー

SQLエディタのツールバーにある「トランザクション」メニューは、複数回の実行にまたがるトランザクションを開いて閉じます。BEGINで開き、COMMITで変更をコミットし、ROLLBACKで取り消します。COMMITとROLLBACKは実行前に確認を求めます。

開いているあいだ、タブはそのタブ専用の接続で動作します。そこで実行するものはすべてトランザクションの中に入り、別の接続を使うほかのタブやツールには、COMMITまで変更が見えません。結果バーには緑の「進行中のトランザクション」ラベルが表示されます。トランザクションを開いたままタブを閉じたりセッションの接続を解除したりすると、ロールバックされます。

メニューを使わずにトランザクションが終わった場合(SQLに書いたCOMMITやROLLBACK、サーバがロールバックしたエラーなど)、ラベルは消え、ステータスバーがそれを伝えます。そのあと実行するものはすぐに確定されます。BEGINはエンジンごとにそれぞれの形で送られ、サーバがすでに失敗としたトランザクションでCOMMITを押すと、Calíopeは何も保存されなかったことを伝えます。

MySQLとMariaDBでトランザクションを完全に使うには、テーブルのストレージエンジンがInnoDBである必要があります。

ClickHouse

ClickHouseでは「トランザクション」メニューは表示されません。エンジンにトランザクションがないからです。各文はそれぞれ単独でコミットされ、UPDATEやDELETEはサーバがバックグラウンドで適用するミューテーションとしてキューに入ります。ステータスバーはキューに入ったことを伝え、「プロセス」ツールで追えます。

Oracle

Oracleではサーバに自動コミットがなく、Calíopeが決めます。メニューのトランザクションの外では、各文は実行するたびに確定されます。BEGINを使うとタブは接続を保持し、COMMITかROLLBACKまで何も確定されません。定義文(CREATE、ALTER、DROP)は保留中のものを自分で確定します。すでに何かを変更していれば、ラベルは消えます。SELECTは何も開かないので、BEGINのあとにクエリーを実行してもトランザクションは残っています。

環境タグがある場合:BEGIN、COMMIT、ROLLBACKは書き込みではないので、タグはこれらについて確認も拒否もしません。書き込みを確認するタグでは、COMMITとROLLBACKの確認のタイトルにタグの名前が入ります。

キーワード: トランザクション、COMMIT、ROLLBACK、BEGIN、InnoDB、ドロップダウン

クエリー履歴

以前に実行したクエリーを呼び出します。

場所: SQLエディタ › 履歴

「履歴」ボタン(時計のアイコン)を押すと、すでに実行したクエリーのシートが開きます。各行には、どう終わったかを示す緑か赤の印、かかった時間、実行日時が付きます。検索でき、「使用」ボタンで1つをエディタに読み戻せます。

記録は文ごとではなく実行ごとに1件です。「スクリプトを実行」で12個の文をまとめて実行すると、履歴にはテキスト全体が1件として残ります。文ごとに見るには、「SQL文」ボタンを使います。

シートに並ぶのはアクティブなタブの履歴だけで、「消去」もそのタブの履歴だけを消します。一方、その横の▲ / ▼ボタンは履歴全体をたどります。

履歴はセッションをまたいで接続プロファイルごとに保持され(プロファイルあたり最大500件)、UserDefaultsのキーcaliope_query_history_<profile id>に保存されます。保持されないのは、32 KBを超える実行のテキストです。その項目はセッションの残りのあいだは表示されますが、ディスクには届きません。半分だけ保存すると、もう一度実行できる切り詰められたSQLが履歴に残ってしまうからです。また、すべての接続を合わせて2 MBの上限があります。それを超えると、次に接続の一覧を読み込むときに、最も長く使っていない接続の履歴がまるごと削除されます。最も新しい接続の履歴が消えることはありません。ほかのデバイスで削除された接続や、復元で取り除かれた接続の履歴も、同じ読み込みのときに消去されます。

キーワード: 履歴、以前のクエリー、最近、ログ

実行計画ビューア

SELECTクエリーの実行計画を図で表示します。

場所: SQLエディタ › 実行計画ビューア

エディタにSELECT文がある状態で、「実行計画ビューア」ボタンを押します。Calíopeはクエリーを実行せずにサーバに実行計画を求め(MySQLとMariaDBではEXPLAIN FORMAT=JSON、PostgreSQLではEXPLAIN (FORMAT JSON)、SQL ServerではSET SHOWPLAN_XML、ClickHouseではEXPLAIN PLAN json = 1、OracleではEXPLAIN PLAN FOR、TiDBではEXPLAIN FORMAT='tidb_json')、結果を「実行計画ビューア」タブで開きます。このタブは、計画のノードツリーをアクセスの種類ごとに色分けして表示します。

キーワード: EXPLAIN、実行計画、オプティマイザ、インデックス、フルスキャン、プラン

文の区切り文字

複数の文を実行する前に、それらを区切る文字を選びます。

場所: SQLエディタ › 区切り文字の選択

結果バーにある「区切り文字」の選択は、Calíopeが実行前にエディタのテキストを個々の文にどう分けるかを決めます。あらかじめ用意された選択肢は3つです:

- ;(セミコロン)— 標準の区切り文字。ほとんどのクエリーに向いています。
- |(パイプ)— SQLの文字列リテラルの中にセミコロンがあるときに便利な代わりの区切り文字。
- $$ — 本体の中に;を含むストアドプロシージャ、関数、トリガーを書くときの一般的な慣習。この区切り文字を使えばCREATE PROCEDURE … BEGIN … END$$のブロックを書けて、Calíopeは各ブロックを1つの文として実行します。

macOSでは、用意されたボタンの隣のテキスト欄に独自の区切り文字を入力することもできます。

有効な区切り文字は、結果をCSV形式で書き出すときのフィールドの区切りにも使われます。

「SQL文」パネルも同じ区切り文字で分割するので、その一覧は実行されるものと一致します。空にしておくと、一覧も実行も;に戻ります。

SQL Serverでは、CREATE PROCEDURE、FUNCTION、TRIGGER、VIEWは送るものの最初の文でなければならず、その本体には;が入ります。「$$」の区切り文字で書くか、単独で実行してください。エディタはGOの行では分割しません。それはsqlcmdとバックアップスクリプトのバッチ区切りで、復元のほうはそれを理解します。

Oracle

Oracleでは、PL/SQLブロックの中では;で分割しません。DECLAREやBEGIN、あるいはCREATE PROCEDURE、FUNCTION、PACKAGE、TRIGGER、TYPEの本体は、SQL*Plusと同じように/だけの行まで丸ごと実行され、END;付きでサーバに届きます。ブロックの外では;で分割し、サーバには各文が;なしで届きます。

キーワード: 区切り文字、$$、パイプ、セミコロン、ストアドプロシージャ、分割、区切り、CSV

結果をファイルに書き出す

クエリーの結果をさまざまな形式で保存します。

場所: SQLエディタ › 結果を保存

結果バーの「結果を保存」ボタン(フロッピーのアイコン)を押します。出力形式(テーブル(テキスト)、JSON、CSV、HTML、XML)を選び、システムの保存ダイアログでファイルの保存先を選びます。

ファイル名には、書き出した日時があらかじめ入っています。

キーワード: 書き出し、保存、CSV、JSON、HTML、XML、ファイル、ダウンロード

テーブルをINSERTとして書き出す

現在のテーブルまたは結果セットのINSERT文を生成します。

場所: SQLエディタ › 「INSERT」メニュー

ツールバーの「INSERT」ドロップダウンメニューには2つの選択肢があります。「現在の結果をINSERTとして書き出す」(現在の結果の行を変換)と「テーブルをINSERTとして書き出す」(ダイアログでテーブルを選び、そのデータを最大10,000行まで書き出す)です。

出力は新しいSQLエディタタブに、コピーや実行ができるテキストとして開きます。

キーワード: INSERT、データの書き出し、ダンプ、初期データ、生成

出力形式

クエリーの結果の表示方法を変えます。

場所: SQLエディタ › 形式の選択

結果バーの「形式」の選択では、次の中から選べます:「テーブル」(操作できるグリッド)、「JSON」(オブジェクトの配列としての結果)、「CSV」(有効な「区切り文字」で区切る)、「テキスト」(列をそろえる)、「HTML」(HTMLの表)、「XML」(フィールドごとのタグ)。

選んだ形式は、結果をファイルに書き出すときにも使われます。

キーワード: 形式、テーブル、JSON、CSV、HTML、XML、出力

結果を連結する

前の結果を消さずに、複数回の実行の結果を積み重ねます。

場所: SQLエディタ › 連結

結果バーの「連結」スイッチをオンにします。このオプションがオンのあいだ、各実行は表示中の行を置き換えずに、そのあとに自分の行を追加します。条件を変えて実行した似たクエリーの結果をまとめるのに便利です。

キーワード: 連結、積み重ね、結合、追加、複数の結果

自動で繰り返す(ポーリング)

N秒ごとにクエリーを自動で実行します。

場所: SQLエディタ › 繰り返す

「繰り返す」スイッチをオンにし、間隔を秒で入力します。Calíopeはその間隔でクエリーを自動的に繰り返し実行します。状態や件数を返すクエリーの結果をリアルタイムで監視するのに便利です。

繰り返しを止めるには、スイッチをオフにします。

キーワード: ポーリング、繰り返し、自動更新、間隔、監視、ループ

DBをリンク — 2つ目のデータベースに接続する

各クエリーを2台のサーバで同時に実行し、結果を比較します。

場所: SQLエディタ › データベースをリンク

SQLエディタのツールバーにある「DBをリンク」ボタン(+付きの鎖のアイコン)は、アクティブなタブに2台目のサーバを接続します。

リンクする方法:
1. 「DBをリンク」を押します。最近の接続プロファイルを選ぶ画面が表示されます。
2. 2台目のサーバのプロファイルを選び、「接続」を押します。
3. 接続が確立すると、ボタンはプロファイル名と✕ボタンの付いた緑のバッジに置き換わります。

DBをリンクした状態で実行すると:
「実行」または「スクリプトを実行」を押すたびに、Calíopeは同じクエリーを両方のサーバで並列に(互いを待たずに)実行します。いつもの結果の表の代わりに比較ビューが表示されます(トピック「2台のサーバの結果を比較する」を参照)。

リンクしたDBを切り離す:
緑のバッジの✕ボタンを押します。セカンダリ接続が閉じ、比較ビューが消え、エディタはプライマリサーバの結果を表示する通常のモードに戻ります。

macOS、iPad、iPhone、Apple Vision Proで使えます。

環境タグがある場合:リンクしたデータベースは、このタブではなく、そのデータベース自身のプロファイルのタグで保護されます。書き込みを確認するタグなら同じウインドウで確認を求め、読み出し専用なら書き込むものはそちらに送られません。

キーワード: DBをリンク、2台目のサーバ、セカンダリ接続、並列、比較、2台のサーバ

2台のサーバの結果を比較する

セルごとの差分を強調表示する、横並びの比較ビュー。

場所: SQLエディタ › データベースをリンク

DBをリンクしているとき(「DBをリンク」を参照)、各実行では通常の表の代わりに比較ビューが表示されます。

概要バー(上部):
- 青の表示 — プライマリサーバの名前、行数、実行時間。
- オレンジの表示 — セカンダリサーバの名前、行数、時間。
- 結果のバッジ:
- ✓ 「一致」(緑)— 2つの結果がまったく同じです。
- ⚠ 「N個の値 · 余分な行:M」(オレンジ)— 違いがあります。
- 「差分のみ」スイッチ — 一致する行を隠し、違いだけに集中できます。結果が一致するときは使えません。

比較表の読み方:
表には、データの列の左に「DB」列が加わります:

表示意味
=両方のサーバで一致する行(1行で表示)
Pセカンダリと異なる、プライマリサーバの行
Sプライマリと異なる、セカンダリサーバの行

行が異なる場合は、2行(PとS)が続けて表示されます。違いがあるセルそのものが強調表示されます:
- 淡い赤 → プライマリサーバ側の変わった値。
- 淡い緑 → セカンダリサーバ側の変わった値。

片方のサーバにしかない行(行数の違い)は、青の背景(プライマリのみ)またはオレンジの背景(セカンダリのみ)で表示されます。

特別な状態:
- 片方または両方のサーバでのエラー — 各サーバのエラーメッセージを別々に表示します。
- DMLクエリー(列なし) — 各サーバで影響を受けた行数と、それが一致するかどうかを表示します。
- 列の不一致 — 各サーバの列の一覧を表示し、余分な列をオレンジで強調表示します。

macOS、iPad、iPhone、Apple Vision Proで使えます。

環境タグがある場合:各サーバは、そのプロファイルのタグで保護されます。クエリーが書き込む場合、それぞれのレベルに応じて確認を求めるか拒否します。

キーワード: 比較、違い、差分、2台のサーバ、並列、強調表示、一致、結果を比較、差分のみ、バッジ、余分な行

エディタにスニペットを挿入する

保存したコードの断片をエディタに直接挿入します。

場所: SQLエディタ › スニペット

SQLエディタのツールバーにある「スニペット」ボタン(星のアイコン)を押します。保存したスニペットの一覧のシートが開くので、1つを選んで「挿入」を押すと、エディタの現在のカーソル位置に追加されます。

キーワード: スニペット、断片、テンプレート、挿入、コード、再利用

セルの値全体を表示する

セルの内容全体を、JSON、画像、SQL、テキストの種類に応じて整えて表示します。

場所: SQLエディタ › 右クリック › 値全体を表示

結果の表のセルは、行をコンパクトに保つため、テキストを切り詰めて1行で表示します。列の幅を変えずに値全体を読むには:

macOS:いずれかのセルをクリックします。セルに付いたポップオーバーが表示され、値全体と、下部に「コピー」ボタンがあります。ダブルクリックすると同じビューアが大きなシートとして開き、下部に「コピー」と「閉じる」があります。画像や長いJSONはこちらのほうが見やすいです。

iPad:いずれかのセルをタップします。値全体を表示するシートが開き、上部のバーに「コピー」ボタンがあります。ダブルタップは引き続き「UPDATEを生成…」です。

ビューアは値をその種類に応じて表示します。種類は自動で判別します。JSONはインデントし直して色分けされ(キー、文字列、数値、リテラルが別々の色)、画像を格納したBLOBはズームできる「画像」として描かれ、文(SELECT、INSERT、WITH…)で始まるテキストは「SQL」としてハイライトされ、それ以外は「テキスト」として表示されます。画像でないバイナリデータは「16進」で表示されます。値に複数の表示方法がある場合は、上部の選択で切り替えられます。たとえば、JSONを格納されたとおりに「テキスト」で見ることができます。

「コピー」は常に元の値をコピーし、インデントし直した値はコピーしません。

どこでも、ビューアのヘッダには列名が表示され、長い値(50文字超)では総文字数が示されます。

値がNULLのセルは、タップしてもビューアを開きません。

ClickHouse

ClickHouseでは、日付と時刻の列のヘッダに、どの時計の時刻かが表示されます。型のタイムゾーン、型にない場合はサーバのタイムゾーンです。サーバがサニタイズしたテキストのセル(UTF-8でなかったバイトが�に置き換えられたもの)には三角形が付き、ポインタを重ねたときとVoiceOverでそう伝えます。それをコピーしても、そこからUPDATEを生成しても、格納された値は再現されません。集計状態の列(AggregateFunction、sumStateが返すもの)は表示されません。セルがそう伝え、値はクエリーでfinalizeAggregation(col)かsumMerge(col)を使えば得られます。Array、Tuple、MapはコンパクトなJSONとして表示されます。

Oracle

Oracleでは、CLOB、NCLOB、BLOBは16 MBまで丸ごと読まれます。それより大きいものを、途中までを値であるかのように表示することはありません。セルにはサイズとどこまで読んだかが表示され(「CLOB / 20,971,520文字(8,388,608文字に切り詰め)」)、BLOBではビューアは読んだ分だけを表示します。Calíopeがデコードしないもの(オブジェクト、XMLTYPE、バイナリのJSON、VECTOR、BFILE、カーソル)は、空白のままにせず、セルに型を表示します。

キーワード: セル、値全体、長いテキスト、ポップオーバー、シート、クリック、ダブルクリック、タップ、切り詰め、読む、JSON、画像、BLOB、16進、SQL、形式

セルの高度な編集

長いテキスト、JSON、バイナリデータ用の専用エディタでセルの値を編集します。

場所: SQLエディタ › 右クリック › 高度なセルエディタ…

結果のいずれかのセルを右クリック(macOS)または長押し(iPadとApple Vision Pro)し、「高度なセルエディタ…」を選ぶと、高度なセルエディタで開きます。Calíopeは値からレイアウトを選びます。JSONは「テキスト」(「JSONを整形」付き)と「ツリー」のタブで、バイナリデータは「16進」、「Base64」、「画像」で、ジオメトリやただのテキストは編集できる欄で開きます。

「OK」をタップすると、macOSでは編集した値がクリップボードにコピーされ、iPadとApple Vision Proでは、その値があらかじめ入った「UPDATEを生成」が開くので、実行前に文を確認できます。

読み出し専用の環境タグがある場合、編集は提供されません。Macではエディタは表示とコピーだけを行い、Mac以外では「高度なセルエディタ…」が表示されません。書き込みを確認するタグでは、UPDATEの実行や行の削除の前に確認を求めます。

キーワード: セル、編集、JSON、BLOB、長いテキスト、コンテキストメニュー、高度

セルからUPDATEを生成する

セルの値を編集し、実行前にUPDATEをプレビューします。

場所: SQLエディタ › 右クリック › UPDATEを生成…

Calíopeは、結果のどのセルからでもUPDATEを生成して実行できます。

macOS:セルをダブルクリックするか、右クリックして「UPDATEを生成…」を選びます。
iPad:セルをダブルタップするか、セルを長押ししてコンテキストメニューから「UPDATEを生成…」を選びます。

次の欄のあるパネルが開きます:

- 「新しい値」— 置き換える値を入力します。NULLを代入するには「NULL」スイッチをオンにします。
- 「テーブル」— 結果を生んだ文のFROM句から自動で判別します(複数の文からなるスクリプトでは最後の文)。必要なら編集してください(判別できないと⚠が表示されます)。
- 「WHEREの列」— 行を特定する列です。Calíopeはサーバにテーブルの主キーを問い合わせてその列にチェックを入れます。キーが複合キーの場合も同じです。テーブルにキーが宣言されていないか、結果にキーの全体が含まれていない場合は、名前で1つの列を提案し(id、次に*_id)、WHEREを確認するよう一覧の下でそう伝えます。列のチェックは付けたり外したりできます。
- 「WHEREの値」— チェックした各列の、その行での現在の値を表示します。どれかがNULLだと、WHEREがその条件のすべての行に影響するため、オレンジの警告が表示されます。

「生成されたSQL」は編集でき、実行前に変更できます。

「UPDATEを実行」(macOS)または「実行」(iPad)を押すと文が実行されます。成功すると、影響を受けた行数と時間が表示され、元のクエリーが自動的に再実行されます。

クエリーが、サーバが更新不可と宣言するビュー(TiDBではすべてのビュー)から読んでいる場合、列も文も提案されません。「テーブル」に元のテーブルを入力し、そのキーにチェックを入れてください。

キーワード: UPDATE、セルを編集、インライン編集、SQLを生成、プレビュー、WHERE、PK、主キー、行を変更

結果から行を削除する

選択した行のDELETEを、SQLのプレビューと編集付きで生成して実行します。

場所: SQLエディタ › 右クリック › 行を削除…

Calíopeは、結果の表に見えているどの行についてもDELETEを生成できます。

macOS:行のいずれかのセルを右クリックし、「行を削除…」を選びます。
iPad:行のいずれかのセルを長押しし、コンテキストメニューから「行を削除…」を選びます。

次の欄のあるパネルが開きます:

- 「テーブル」— 結果を生んだ文のFROM句から自動で判別します。名前が正しくない場合(JOINや別名を使っているときなど)は、database.tableの形式で手で入力します。
- 「WHERE句」— 行を特定する列です。Calíopeはサーバにテーブルの主キーを問い合わせてその列にチェックを入れます。キーが複合キーの場合も同じです。それができない場合は名前で1つを提案し、一覧の下でそう伝えます。すべてのチェックを外すと、行はすべての値で特定されます。
- 「生成されたSQL」— 編集できるDELETEのプレビューです。「SQLをコピー」ボタンを使うと、実行せずにクリップボードにコピーできます。

DELETE FROM `my_db`.`users`
  WHERE `id` = '42';

「行を削除」を押すと実行されます。元のクエリーが自動的に再実行され、表が更新されます。エラーが起きた場合、パネルは開いたままでサーバのエラーメッセージを表示します。

注意:このDELETEはエディタからではなく内部で実行されるため、セーフモードでは止められません。確定する前に必ずWHEREを確認してください。

クエリーが、サーバが更新不可と宣言するビュー(TiDBではすべてのビュー)から読んでいる場合、列も文も提案されません。「テーブル」に元のテーブルを入力し、そのキーにチェックを入れてください。

Apple Vision Pro:行番号で行を選んで「削除」(ゴミ箱)を押すか、セルを見てピンチしたまま保持すると、同じメニューが開きます。

キーワード: 削除、行を削除、コンテキストメニュー、結果、テーブル、WHERE、SQLをコピー、主キー

SQL関数のコンテキストヘルプ

エディタを離れずに、接続中のエンジンの関数のドキュメントを参照します。

場所: SQLエディタ › テキストエディタ

Calíopeは、セッションのエンジンの関数について組み込みのドキュメントを表示し、各エンジンには独自の項目があります。MySQLとAuroraはMySQLのもの、MariaDBは独自のものと、MySQLと共通する部分についてはMySQLのもの、TiDBも同様に独自のもの(TIDB_*、ベクトルのVEC_*、シーケンスの関数)と、MySQLと共通する部分についてはMySQLのもの、PostgreSQL、SQL Server、Oracle、ClickHouse、SQLite、DuckDBはそれぞれ独自のものです。2つのエンジンにある名前でも項目は共有しません。いつも同じ意味とは限らないからです。LENGTHはPostgreSQLでは文字数を、MySQLではバイト数を数えます。関数にポインタを重ねても何も表示されない場合、その関数は接続中のエンジンには存在しません。

ハイライトと自動補完も同じ規則に従います。色を付けて候補に出すのは、セッションのエンジンのキーワードと関数で、ほかのエンジンのものではありません。

ClickHouse。関数のほとんどは大文字と小文字を区別します。sumIfはありますがSUMIFはありません。自動補完はサーバが期待するつづりで候補を出し、「整形」はそれを大文字にしません。

macOS:エディタで、認識された関数の名前にポインタを重ねます。少し待つとポップオーバーが表示され、構文、戻り値の型、説明、型付きのパラメータ、使用例が示されます。

iPad:カーソルが認識された関数の名前の中かすぐ後ろにあると、エディタのツールバーの下にコンテキストバーが自動的に表示され、名前と構文が示されます。バーの「?」ボタンを押すと、ドキュメント全体がシートで開きます。

ドキュメントの内容:
- 関数の完全な構文
- 戻り値の型
- 動作の説明
- 名前、型、省略できるかどうかを付けたパラメータ
- あれば使用例

どのバージョンからか。Calíopeが対応するそのエンジンの最も古いバージョンに関数が存在しない場合、項目の戻り値の型の下に、それを導入したバージョンが「PostgreSQL 16以降」のように示されます。

SQLiteエディタとDuckDBエディタ。どちらの「SQLを実行」セクションも、SQLエディタと同じようにそのエンジンの項目を表示します。macOSではポップオーバー、iPadではバーです。

MongoDB。「クエリー」ツールでは、フィルタとパイプラインの演算子($match、$gt、$dateTrunc、$rank…)にも項目があります。macOSではポインタを重ねたとき、iPadではテキストカーソルが演算子の上にあるときに表示されるバーで見られます。

Apple Vision Pro:カードはエディタのツールバーの下には置かれず、ウインドウの下のオーナメントにぶら下がります。同じくそこにぶら下がるエディタのツールバーのすぐ上です。

キーワード: 関数、ヘルプ、ドキュメント、SUM、COUNT、DATE_FORMAT、JSON_EXTRACT、ポップオーバー、自動補完、MySQL、MariaDB、PostgreSQL、TO_CHAR、STRING_AGG、SQLite、DuckDB、MongoDB、ClickHouse、sumIf、Oracle、NVL、DECODE、演算子、以降、バージョン

SQL文マネージャ

エディタのスクリプトを解析し、その文を1つずつ管理します。

場所: SQLエディタ › SQL文

「SQL文」ボタン(リストのアイコン)を押すとSQL文マネージャが開きます。エディタの内容をセミコロンで分割し、各文に番号を付けて、種類(SELECT、INSERT、UPDATEなど)と色付きのアイコンとともに表示します。マネージャからは、文を1つずつコピーしたり、エディタに読み込んだり、一覧から取り除いたり、その中を検索したりできます。

これは今エディタにあるテキストのビューで、何も実行しません。シートを開くたびに計算し直され、「リストから削除」は一覧から行を外すだけで、エディタからは決して消しません。そこが、すでに実行したものを実行ごとに1件ずつ記録する「履歴」との違いです。

マネージャは結果バーの有効な区切り文字で分割します。実行で使うのと同じものです。;ならセミコロンで分割し、CREATE PROCEDUREを書くために$$にしていれば、ブロック全体が1つの文として並びます。そのため、並ぶものは実行されるものと一致します。

キーワード: SQL文、分割、管理、クエリーの一覧、スクリプトマネージャ

スクリプト全体を実行する

⌘⇧↩でエディタのすべての文を一度に実行します。

場所: SQLエディタ › スクリプトを実行 (⌘⇧↩)

ショートカット⌘⇧↩か、SQLエディタのツールバーにある「スクリプトを実行」ボタン(二重の稲妻のアイコン)を使うと、テキストを選択していてもいなくても、エディタのすべての文を順に実行します。

macOS:ボタンはツールバーのメインの「実行」ボタンの隣にあります。
iPad:エディタの上部のツールバーにあります。

選択範囲かカーソル位置の文だけを実行する「実行 (⌘↩)」と違い、「スクリプトを実行」は有効な区切り文字で区切られたすべての文を順に処理し、結果を積み重ねます。

書き込みを確認する環境タグがある場合、この確認のタイトルにタグの名前が入り、それが唯一の質問になります。読み出し専用のタグでは、スクリプトが書き込むなら何も実行されません。

キーワード: スクリプトを実行、すべて実行、⌘⇧return、すべての文、スクリプト全体、複数のクエリー

結果グリッド

結果は選んだサイズのページで届きます。変えなければ50行です。

場所: SQLエディタ › 結果グリッド

結果は50行のページで届きます(または、「設定」›「テキストエディタ」›「結果」›「ページあたりの行数」で選んだ20〜200行。iPadでは「設定」)。下部のバー(前へ、次へ、ページの表示)は、クエリーが複数ページ分を返したときだけ表示されます。macOSでは、ヘッダをクリックして並べ替えたり、⇧か⌘で複数の行を選んだり、⌘Cでコピーしたり(列名を先頭にしたTSVになります)、アプリの外へドラッグしたりできます。

並べ替えはクライアント側で行われ、結果全体が対象です。並べ替えるのはすでに取得した行(目の前のページだけでなくすべて)で、ページはそのあとで区切られます。サーバ上のテーブルを並べ替えるわけではなく、並べ替えが適用されているあいだはグリッドの下にそう表示されます。本当の上位10件がほしいなら、順序はクエリーに書きます:ORDER BY … LIMIT 10。

選択はページのものです。ページを替えると消えるので、⌘Cやドラッグで、もう目の前にない行を運ぶことはありません。

iPad、iPhone、Apple Vision Proでも、下部のバーは同じです。

どこでも、分割はローカルです。クエリーは全体が実行され、メモリー上で分けられます。行の範囲を正確に指定したいなら、クエリーにLIMITとOFFSETを加えてください。

キーワード: グリッド、結果、並べ替え、ヘッダ、行を選択、コピー、TSV、ページ分割、ページ、50行、200行、LIMIT、OFFSET

エディタで検索と置換

システム標準の検索を使って、SQLエディタのテキストを検索・置換します。

場所: SQLエディタ › 検索 (⌘F)

SQLエディタのツールバーにある「検索」ボタン(虫めがねのアイコン)を押すか、ショートカット⌘F(macOS)を使うと、組み込みの検索が開きます。

macOS:標準のNSTextFinderが起動し、検索欄と置換欄、↩ / ⇧↩での一致箇所の移動、1件またはすべての一致を置き換えるオプションが使えます。

iPad:UIFindInteractionが起動し、キーボードの上にiOS標準の検索・置換バーが表示され、タッチで一致箇所を移動できます。

キーワード: 検索、置換、探す、テキスト、⌘F、NSTextFinder

エディタから履歴をたどる(REPL風)

履歴パネルを開かずに、エディタから直接以前のクエリーを呼び出します。

場所: SQLエディタ › 履歴の‹ ›矢印

SQLエディタでは、mysqlターミナルと同じように、テキスト欄から直接以前のクエリーを呼び出せます。

macOS:
- カーソルがエディタの一番先頭(位置0、何も選択していない)にあるときに↑を押すと、履歴の1つ前のクエリーを読み込みます。
- カーソルが最後の行にあるときに↓を押すと、現在のほうへ戻ります。
- エディタのツールバーの▲ / ▼ボタンも使えます。

iPad:
- ▲ / ▼ボタンを使うか、ハードウェアキーボードでは、エディタの一番先頭で↑、テキストの一番最後で↓を押します。

たどっているあいだに何も失われません。履歴に入るときにエディタにあったものが保存され、↓で戻るとそのまま復元されます。空のエディタが残ることはありません。また、エディタにあるのが自分で書きかけた下書きなら、キーもボタンもそれには触れません。↑と↓はいつもどおりカーソルを動かします。

キーとボタンは同じ1つの道のりを共有するので、▼は↑がしたことをちょうど元に戻します。たどるのはアクティブなタブの履歴で、「履歴」ボタンの奥のシートに並ぶのと同じものです。履歴をたどっても履歴は変わりません。

キーワード: 履歴、REPL、矢印、たどる、上、下、前、次、シェブロン

結果をピン留めして比較する

ほかのクエリーを実行しながら参照できるよう、現在の結果を保存します。

場所: SQLエディタ › 結果をピン留め

結果バーの「ピン留め」ボタン(ピンのアイコン)は、現在の結果のコピーを、それを生んだSQLと実行時間とともに保存します。ピン留めした結果は、ほかのクエリーを実行しても残ります。

ピン留めした結果があると「ピン留め (N)」ボタンが表示され、ピン留めした結果のパネルの表示・非表示を切り替えます。ピン留めした各結果には次が表示されます:
- それを生んだSQLの省略形
- 行数と列数
- 実行時間
- その結果だけのピン留めを外す✕ボタン

macOS、iPad、iPhone、Apple Vision Proで使えます。変更の前後でテーブルの状態を比べるのに便利です。

キーワード: ピン留め、ピン留めした結果、比較、複数、結果を保存、前後

組み込みのSQLターミナル(REPLモード)

mysql>プロンプトで対話的にSQLを実行する、ターミナル風のパネル。

場所: SQLエディタ › ターミナル

SQLエディタのツールバーにある「ターミナル」ボタン(ターミナルのアイコン)を押すと、REPL風の下部パネルが開きます。

使い方:
- エンジンのプロンプト(mysql>、mariadb>、postgres=#…)の付いた欄にSQLを入力し、↩(または↵ボタン)を押して実行します。
- SELECTの結果は、+---+の区切り線を使ったASCIIの表で表示されます。
- DML文では「クエリーOK、N行に影響」と表示されます。
- サーバが警告を残した場合(MySQL、MariaDB、PostgreSQL)、そのあとに「サーバからの警告N件」と、1行に1件ずつ「レベル(コード):テキスト」の形で続きます。
- エラーはサーバのメッセージとともに赤で表示されます。
- エディタタブでセーフモードがオンなら、ターミナルもエディタと同じ文を拒否し、どの語が見つかったかを伝えます。サーバには何も届きません。

ターミナルの履歴をたどる:
- macOS:入力欄で↑ / ↓を使うと、ターミナルで以前に実行したクエリーをたどれます。
- iPad、iPhone、Apple Vision Pro:入力欄の左の▲ / ▼ボタンを使います。

消去:ゴミ箱のボタンでターミナルの出力を消去します。ヘッダにあり、Apple Vision Proでは↵ボタンの隣にあります。

ターミナルには、メインのSQLエディタとは別の独自の履歴があります。ターミナルから実行したクエリーは、セッション全体の履歴にも加わります。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: ターミナル、REPL、プロンプト、MySQL、対話的、コンソール、ASCII、テーブル

結果を複数の形式で書き出す

CSVに加えて、JSON、Markdown、XML、Excel(.xlsx)で結果を保存します。

場所: SQLエディタ › 形式の選択

従来の形式(テーブル、CSV、HTML)に加えて、結果バーの「形式」の選択には次があります:

- JSON — オブジェクトの配列。APIや開発ツールに最適です。
- Markdown — Markdownの表形式。ドキュメントやNotionにそのまま貼り付けられます。
- XML — 1行に1つの要素。データ処理ツールで扱えます。
- Excel(.xlsx) — NumbersやExcelですぐに開けるスプレッドシート。この形式を選ぶと結果バーに表示される「保存」ボタンを使います。

結果バーの「保存」 / 「共有」ボタンは、選択中の有効な形式で書き出します。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: 書き出し、JSON、Markdown、XML、Excel、XLSX、形式、結果を保存、Numbers

SELECT * を明示的な列に展開する

SELECTのアスタリスクを、テーブルの実際の列名に置き換えます。

場所: SQLエディタ › 右クリック › * を展開 → 列

エディタにSELECT * FROM tableがあるとき、Calíopeはその*を、エディタの中で直接テーブルの列の明示的な一覧に展開できます。

使い方(macOS):
1. *を含むSELECT文の中にカーソルを置きます。
2. エディタを右クリックしてコンテキストメニューを開きます。
3. 「*を展開 → table_nameの列」を選びます。

Calíopeはサーバに問い合わせてテーブルの現在の列を取得し、*を、バッククォートで囲んでカンマで区切った列の一覧に置き換えます。たとえば:

SELECT `id`, `name`, `email`, `created_at` FROM `users`

条件:
- ツールバーの選択でアクティブなデータベースを選んでいる必要があります。
- このオプションは、カーソルが有効なSELECT … FROM table文の中にあるときだけコンテキストメニューに表示されます。
- テーブルがアクティブなデータベースに存在し、ユーザに読み取り権限がある必要があります。

macOSでのみ使えます。このバージョンでは、iPad、iPhone、Apple Vision Proで列の展開は使えません。

キーワード: 展開、アスタリスク、SELECT *、列、明示的、展開する、置換、バッククォート

SQLエディタの自動補完

SQLキーワード、テーブル名、列名を補完します。入力中に自動で候補を出すには、「設定」でオプションをオンにする必要があります。

場所: Calíope › 設定 › テキストエディタ

SQLエディタには、独立した2つの自動補完の層があります。

1. SQLキーワード:
エディタはセッションのエンジンのキーワード(SELECT、FROM、WHERE、JOIN、GROUP BYなど)を知っていて、候補のポップアップに含めます。この層のオン・オフは「設定」›「テキストエディタ」›「SQLキーワードを自動補完」で切り替えます。

2. スキーマのテーブル名と列名:
Calíopeはアクティブなデータベースのオブジェクト(テーブル、列、別名)を読み込み、候補に加えます。名前の先頭から入力する必要はありません。名前のどの部分でもよく、入力したもので始まる名前が先に並びます。

ポップアップの開き方:

- 手動で:macOSでは⌘N、iPadではエディタのツールバーの「自動補完」ボタン(物理キーボードがあれば⌘N)です。何を入力していても、いつでもポップアップを開きます。ボタンは「設定」で自動補完がオンになっていれば常にあり、それはショートカットを左右するのと同じスイッチです。

- 入力中に自動で:入力を少し止めると、ポップアップが自動で表示されるようにできます。この機能はデフォルトでオフです。オンにするには、「設定」›「テキストエディタ」で「リアルタイムの自動補完」スイッチをオンにします。オンにすると、最後のキー入力からおよそ350 ms後にポップアップが表示されます。

SELと入力して手を止めても何も表示されない場合、リアルタイムの自動補完はオンになっていません。⌘N(iPadではツールバーのボタンも)で手動で開くか、「設定」でオプションをオンにしてください。

ドットを入力したときのオブジェクトのポップアップ:
エンジンの識別子の引用符で囲んだデータベース名に続けてドットを入力すると、エディタはそのデータベースのテーブルを自動で表示し、そのまま選べます。MySQLとMariaDBでは`my_db`.、PostgreSQLでは"my_schema".、SQL Serverではスキーマ付きのデータベースで[my_db].[dbo].です。入力を続けると、一覧は入力したものを含む名前に絞り込まれます。

ポップアップで選んだものは、セッションのエンジンの引用符(バッククォート、二重引用符、角括弧)で同じように囲んで書かれます。

macOS、iPad、iPhone、Apple Vision Proで使えます。iPadとiPhoneではキーボードは不要です。ツールバーのボタンが⌘Nとまったく同じようにポップアップを開きます。

キーワード: 自動補完、候補、キーワード、テーブル、列、ポップアップ、補完、⌘N、リアルタイム、ライブ、入力待ち、自動

エディタでブロックを折りたたむ・展開する

括弧とBEGIN…ENDのブロックを折りたたんだり展開したりして、複雑なスクリプトを読みやすくします。

場所: キーボードショートカット: ⌃. / ⌃, — clic en el margen izquierdo

CalíopeのSQLエディタでは、2種類のブロックを折りたためます:

1. 括弧のブロック(…)
長いサブクエリー、IN (…)句、CREATE TABLEの列の一覧に便利です。内側に改行のある(を含む行では、左の余白に▼の三角形が表示されます。

2. BEGIN…ENDのブロック
ストアドプロシージャ、関数、トリガー、MariaDB/MySQLのイベントの本体はBEGIN…ENDを使います。BEGINを含む行の上の左の余白に▼の三角形が表示されます。折りたたむとブロックはBEGIN(…)ENDと表示され、オブジェクトのシグネチャ(CREATE PROCEDURE …、CREATE FUNCTION …など)は見えたままです。

対応するブロック:
- CREATE PROCEDURE name() BEGIN … END
- CREATE FUNCTION name() RETURNS type BEGIN … END
- CREATE TRIGGER name … BEGIN … END
- CREATE EVENT name … DO BEGIN … END
- 単独のBEGIN … ENDブロック(トランザクションの開始)

END IF、END LOOP、END CASE、END WHILEなどのブロックはルーチンのBEGINを閉じるものではなく、正しく無視されます。

折りたたむ・展開する方法:
- マウス・タッチで:その行の左の余白にある▼の三角形をクリック(macOS)またはタップ(iPad)します。
- キーボードで(macOS):
- ⌃.(Control+ピリオド)— カーソルを含むブロック(括弧またはBEGIN…END)を折りたたみます。
- ⌃,(Control+カンマ)— カーソル位置の折りたたまれたブロックを展開します。

動作:
- 折りたたみは表示だけです。テキスト全体はエディタに残り、実行時にはすべてサーバに送られます。
- 折りたたみはタブを開いているあいだ保たれます。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: 折りたたみ、展開、括弧、折りたたむ、サブクエリー、入れ子、⌃.、⌃、BEGIN、END、プロシージャ、ストアドファンクション、トリガー、ルーチン、BEGIN END、ブロックを折りたたむ

パフォーマンスモニタ(CPUとメモリー)

サイドバーに、アプリのCPUとRAMを示し、使用量が多いときは片付けを提案する表示。

場所: サイドバー › パフォーマンスモニタ(サイドバーの下部)

パフォーマンスモニタは、ワークスペースの左のサイドバーの下部(ツールナビゲータの下端。Apple Vision Proでは左のオーナメント)に表示されます。Calíopeアプリの現在のCPUとRAMの使用量を示します。

表示の色:
- 🟢 緑 — 通常のパフォーマンス(CPU < 30%、RAM < システムのRAM総量の5%)
- 🟡 琥珀色 — 高い使用量(CPU 30〜70%、またはRAMがシステムのRAM総量の5〜10%)
- 🔴 赤 — 高い負荷(CPU > 70%、またはRAM > システムのRAM総量の10%。iPadではOSの警告でもこの状態になります)

「結果を消去」の意味:そのSQLエディタタブの現在の結果の行の配列を破棄し、それが占めていたメモリーを解放します。エディタに書いたクエリーは削除されません。いつでも再実行できます。

対処するとき:表示のバッジが赤になると、アプリの反応が遅くなることがあります。表示を押すかタップすると詳細パネルが開きます。提案には、どのタブが最もメモリーを使っているかが正確に示され、すぐに使える操作のボタンがあります。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: パフォーマンス、メモリー、CPU、RAM、遅い、結果を消去、モニタ、負荷、高い使用量

SQLのコメントを切り替える (⌘D)

選択した行を「--」で始めてコメントにしたり、コメントを外したりします。

場所: SQLエディタ › コメント

⌘D(またはツールバーの「コメント」ボタン)を押すと、選択した行のSQLコメントを切り替えます。

動作:
- テキストを選択している場合は、選択範囲内のすべての行に作用します。
- 選択していない場合は、カーソルのある行に作用します。
- 空でない行がすべて--で始まっていればコメントを外し、そうでなければ各行の先頭に--を加えます。

ショートカット:
- macOS:エディタで⌘D、またはツールバーのボタン
- iPad:Magic Keyboardで⌘D、またはツールバーのボタン

macOSでは⌘Zでこの操作を取り消せます。

キーワード: コメント、コメントの切り替え、コメント解除、--、SQLコメント、⌘D、行

リンティング — 実行前のエラー診断

データベースに対して何も実行せずに、入力中のエディタで字句のエラーに下線を引きます。

場所: SQLエディタ › 結果バー

実行前のリンティングは、エディタのテキストを自動的に(入力を止めてから500 ms後に)解析し、サーバが必ず拒否する字句のエラーに赤い破線で下線を引きます。

検出するエラー:

エラー例
文字列リテラルが閉じられていないWHERE name = 'john
バッククォートの識別子が閉じられていないSELECT `column
ブロックコメントが閉じられていない/* 閉じていない
閉じ括弧のない開き括弧SIN(x + 1
開き括弧のない閉じ括弧SIN x + 1)

読み方:
- 問題の文字に赤い破線で下線が引かれます。
- 結果バーに、エラーの数を示す赤いバッジ(例:⚠ 2件のエラー)が表示されます。バッジにポインタを重ねると、すべてのメッセージが表示されます。
- エラーがなければバッジは消えます。

制限:
リンターは字句を見るだけです。テーブル名や列名がサーバに存在するかは確かめず、SQLの句の意味も検査しません。目的は、長いスクリプトでは見つけにくい、最も明らかなエラー(閉じていない文字列、釣り合わない括弧)を捕まえることです。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: リント、リンティング、エラー、診断、下線、実行前、括弧、文字列、バッククォート、コメント、事前チェック

自動折り返し(ワードラップ)

長い行を表示上で折り返すか、横スクロールにするかを決めます。

場所: SQLエディタ › 設定 → テキストエディタ

自動折り返しは、表示幅を超える長さの行をエディタでどう表示するかを決めます。

オン(デフォルト):長い行は、テキストに文字を挿入せずに次の表示行へ折り返されます。横スクロールなしで複雑なクエリーを読むのに快適です。

オフ:各行がちょうど1行を占めます。エディタの下部に横スクロールバーが表示され、途切れずに行全体を見られます。表のようにそろえたスクリプト(SELECT column1, column2, ...)や、とても長い行のある自動生成コードを確認するのに便利です。

変更する方法:
- macOS:メニュー「Calíope」→「設定」→「テキストエディタ」→「自動折り返し」。
- iPad:アプリの「設定」→ 同じオプション。

iCloud同期をオンにしていれば、設定はほかのデバイスにも届きます。オフなら、各デバイスがそれぞれの設定を保ちます。

キーワード: ワードラップ、行の折り返し、折り返し、横スクロール、長い行、環境設定、設定、折り返さない

括弧の対応の強調表示

カーソルの位置の括弧やキーワードに対応する、閉じ側・開き側を光らせます。

場所: SQLエディタ › テキストエディタ

カーソルが括弧やBEGIN/ENDのキーワードの隣にあると、エディタはそれに対応する文字やキーワードを自動で強調表示します。

対応するペアの種類:

開き閉じSQLの例
()サブクエリー、関数の呼び出し
{}インラインのJSON
[]空白を含む名前[my table]
BEGINENDプロシージャ、関数、トリガー、イベント

色の意味:
- 黄 — 両端が正しく対応しています。
- 赤 — 括弧やキーワードにペアがありません(不均衡)。

動作:
- 強調表示は、カーソルを動かしたりテキストを変更したりするとリアルタイムで更新されます。
- END IF、END LOOP、END CASE、END WHILE、END REPEAT、END FORは正しく無視されます。対応付けるのは、ルーチンのBEGINブロックを閉じるENDだけです。
- 入れ子のBEGIN/ENDブロックは深さを数えて解決します(入れ子が何段あっても正しいENDを特定します)。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: 括弧、丸括弧、対応、ペア、強調表示、BEGIN、END、波括弧、不均衡、入れ子、ペアを強調

語のすべての一致を強調表示する

語をダブルクリックすると、エディタはテキスト中のその語をすべて光らせます。

場所: SQLエディタ › テキストエディタ

エディタで語(テーブル名、列、別名、キーワード)をダブルクリックすると、その語のほかの出現箇所がすべて青緑の背景で塗られます。iPadで同じことをするジェスチャはダブルタップです。

何を強調表示するかの決め方:
- 一致は語単位です。idを選んでも、identifierの中のidは光りません。
- 大文字と小文字を区別しません。MySQLにとってId、id、IDは同じ列だからです。
- 選択はちょうど1語でなければなりません。空白、カンマ、括弧をまたいだり、語の途中で切れたりしていると、何も強調表示されません。
- 語は2文字以上でなければなりません。
- 選択した語そのものは塗り直しません。選択の色ですでに区別されています。

強調表示は、キャレットが動いたとき、ほかのものを選択したとき、テキストを編集したときに消えます。光るのは最大500か所です。その上限に達するスクリプトでは、「検索」(⌘F)のほうが向いています。一致箇所を次々にたどることもできるからです。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: 強調表示、一致、ダブルクリック、ダブルタップ、出現箇所、語、語を選択、光らせる、ハイライト

列編集 / マルチカーソル

エディタの複数の位置で同時に編集します。

場所: SQLエディタ › 列編集

列編集モードは、複数の行に副カーソルを置き、そのすべてで同時に入力や削除を行います。5行にある別名の名前を変えたり、行のブロックに接頭辞や接尾辞を付けたりするときに使います。

macOSでは:
AppKitには独自のマルチカーソルがないので、Calíopeが描きます。ツールバーの「列編集」ボタンを使うか、⌥⌘↓を押すだけで、モードがオンになり2つ目のカーソルが一度に置かれます。オンのあいだボタンは紫になります。そこから、クリックするたびにカーソルが1つ加わり、⌥⌘↓ / ⌥⌘↑でマウスに触れずに下または上の行に1つ加わります。列の位置は保たれ、短い行では行末に合わせられます。Escでモードを抜けます。ここでは⌘⇧Mはショートカットではありません。macOSではすでにスニペットの選択を開くからです。

iPadでは:
Magic Keyboardで⌘⇧Mを押すか、ツールバーの「列編集」ボタンを押します。モードがオンのあいだ、エディタをタップするたびに副カーソルが積み重なります。キーボードがあれば、macOSと同じように⌥⌘↓ / ⌥⌘↑で下または上の行に1つ加わります。

どこでも、副カーソルは行がハイライトされた青い縦線で、入力や削除は同じように働きます。文字はまず主カーソルに入り、そのあと副カーソルの位置へ、位置の大きいものから小さいものへ順に複製されます。そうすれば、1つに挿入してもこれから入る位置がずれません。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: マルチカーソル、列編集、カーソル、⌘⇧M、⌥⌘↓、カーソルを追加、同時、列、複数カーソル

定義へ移動

エディタから、カタログにあるテーブル、ビュー、ルーチン、トリガーの定義へ直接移動します。

場所: SQLエディタ › 右クリック › 定義へ移動

「定義へ移動」は、カーソル位置の識別子の名前を解決し、そのオブジェクトを選択した状態で「カタログ」タブを開きます。

使い方:

プラットフォーム方法
macOSエディタで識別子を⌘+クリック
macOSカーソルを識別子に置いてF12
macOSコンテキストメニューで右クリック›「定義へ移動」
iPad識別子を長押し → コンテキストメニュー →「定義へ移動」

認識するオブジェクト:
- テーブル → 「カタログ」タブを開き、テーブルを選択
- ビュー → 「ビュー」タブに切り替えてビューを選択
- プロシージャと関数 → 「ルーチン」タブに切り替え
- トリガー → 「トリガー」タブに切り替え

動作:
1. Calíopeは、選択中のアクティブなデータベースのオブジェクトを問い合わせます。
2. 識別子が既知のオブジェクトと一致すれば、「カタログ」タブを開き(またはアクティブにし)、オブジェクトを自動で選択します。下部のパネルへのDDLの読み込みも含みます。
3. 識別子がアクティブなスキーマに存在しなければ、カタログは開かず、ステータスバーに「スキーマにオブジェクトが見つかりません」と表示されます。

条件:ツールバーの選択でアクティブなデータベースを選んでいる必要があります。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: 定義へ移動、移動、テーブル、ビュー、ルーチン、カタログ、F12、⌘クリック、長押し、識別子、スキーマ

ポインタを重ねて表示するDDLのツールチップ

エディタで名前にポインタを重ねるだけで、テーブル、ビュー、ルーチン、トリガーのDDLを表示します。

場所: SQLエディタ › DDLのツールチップ

ポインタを重ねて表示するDDLのツールチップは、エディタを離れずにスキーマのオブジェクトの定義を調べる最も速い方法です。

仕組み:

プラットフォーム動作
macOSスキーマのオブジェクトの名前にポインタを0.4秒重ねると、DDL全体のポップオーバーが表示されます
iPadテキストカーソルをスキーマの識別子の上に動かす(タップする)と、ツールバーの下にDDLバーが表示されます

ポインタを使わずに(macOS):「移動」›「カーソル位置の関数のヘルプ」(⌥⌘?)は、テキストカーソルの位置にあるもののカードを開きます。ポインタを重ねたときと同じポップオーバーで、入力したばかりの関数(DATE_FORMAT()も含みます。そこに説明するものがなければ、ビープ音が鳴ります。

ポップオーバー / DDLバーの内容:
- 種類ごとのアイコンとバッジ(TABLE、VIEW、PROCEDURE、FUNCTION、TRIGGER、EVENT)
- 等幅フォントで、テキストを選択できるDDL全体
- 「定義へ移動」ボタン → 「カタログ」タブのそのオブジェクトへ移動

認識するオブジェクト:
テーブル · ビュー · ストアドプロシージャ · 関数 · トリガー · イベント

組み込みの関数のヘルプとの共存:
- 識別子が(の続く組み込みのSQL関数(例:DATE_FORMAT()なら、DDLではなく関数のドキュメントが表示されます。
- 識別子が(の続かないスキーマのオブジェクトなら、DDLのツールチップが表示されます。
- 2つの仕組みが同時に働くことはありません。

キャッシュ:各オブジェクトのDDLは、問い合わせを繰り返さないよう、セッションのあいだメモリーに保存されます。

条件:ツールバーの選択でアクティブなデータベースを選んでいる必要があります。

macOS、iPad、iPhone、Apple Vision Proで使えます。

Apple Vision Pro:カードはエディタのツールバーの下には置かれず、ウインドウの下のオーナメントにぶら下がります。同じくそこにぶら下がるエディタのツールバーのすぐ上です。

キーワード: DDL、ポインタを重ねる、ツールチップ、ポップオーバー、CREATE TABLE、SHOW CREATE、定義、テーブル、ビュー、プロシージャ、関数、トリガー、イベント、調査、スキーマ、ヒントバー

クイックオープン — オブジェクトにすばやく移動

名前の一部を入力して、アクティブなスキーマのどのオブジェクトにも移動できる検索パレット。

場所: SQLエディタ › クイックオープン

クイックオープンは、エディタを離れたり「カタログ」のツリーをたどったりせずに、どのテーブル、ビュー、プロシージャ、関数、トリガー、イベントにも移動できる即時の検索パレットです。

開き方:

プラットフォーム方法
macOS⌘⇧O(「移動」メニュー ›「クイックオープン…」)
iPad⌘⇧O(Magic Keyboard)、またはエディタのツールバーの「クイックオープン」ボタン

使い方:
1. 検索欄のあるパネルが開きます。
2. オブジェクトの名前の一部を入力します。一覧はリアルタイムで絞り込まれます。
3. ↑↓キーで結果を選んで↵で確定するか、項目を直接クリックします。
4. Calíopeは「カタログ」タブのそのオブジェクトへ自動で移動します。
5. いつでもEscを押せば、移動せずに閉じます。

検索の方法(3段階のあいまい一致):
- 名前が入力したテキストで始まる → 最優先
- 名前のどこかにテキストを含む → 中程度
- 入力した文字が部分列として順に現れる(例:cruでcreate_userが見つかる) → 最も低い

一致した部分はアプリのアクセントカラーで強調表示されます。

認識するオブジェクト:テーブル · ビュー · プロシージャ · 関数 · トリガー · イベント

範囲:ツールバーの選択でアクティブなデータベースだけを検索します。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: クイックオープン、あいまい検索、オブジェクトを検索、パレット、テーブル、ビュー、プロシージャ、関数、トリガー、イベント、移動、カタログ、⌘⇧O、スキーマ

スクリプト内のシンボル名を変更する

別名、CTE、変数の名前を変え、その変更をアクティブなスクリプト内のすべての参照に反映します。

場所: SQLエディタ › 右クリック › シンボル名を変更

「シンボル名を変更」は、スクリプト内のローカルな識別子(列の別名、CTEの名前、変数)の名前を変え、同じファイル内のすべての出現箇所を1回の操作で自動的に置き換えます。

呼び出し方

プラットフォーム操作
macOS識別子を右クリック →「シンボル名を変更…」
iPad識別子を長押し → コンテキストメニュー →「シンボル名を変更…」

表示されるダイアログに新しい名前を入力し、「名前を変更」で確定します(または↵を押します)。すべての出現箇所が一度に置き換わります。

取り消し:操作全体は1回の⌘Z(macOS)か、デバイスを振るか取り消しボタン(iPad)で取り消されます。出現箇所を1つずつ取り消す必要はありません。

範囲:アクティブなタブで開いているスクリプトだけです。データベースのオブジェクトは何も変更しません。

一致:語の境界で判断するので、idの名前を変えてもclient_idやuser_idには影響しません。

注記:置き換えは大文字と小文字を区別し、スクリプトのテキスト全体に適用されます。識別子がコメントや文字列リテラルに現れていれば、そこも含みます。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: 名前を変更、シンボル、別名、CTE、変数、リファクタリング、置換、識別子、スクリプト、語単位、コンテキストメニュー

クエリービルダー — クエリーを視覚的に組み立てる

テーブルをドラッグし、列を選び、JOINはCalíopeに自動生成させて、SELECTクエリーを視覚的に組み立てます。

場所: ワークスペース › クエリービルダー

クエリービルダーは、SQLを手で書かずにSELECTクエリーを視覚的に組み立てられるワークスペースのタブです。

開き方

- macOS / iPad:ワークスペースのナビゲーションバーの「クエリービルダー」タブ(まとめた長方形のアイコン)。

作業の流れ

1. 左のパネルに、アクティブなデータベースのすべてのテーブルが表示されます。
2. テーブル、またはその隣の「+」をクリックして追加します(キャンバスにドラッグすることもできます)。
3. 各テーブルは、列ごとにチェックボックスのあるカードとして表示されます。デフォルトではすべての列にチェックが入っているので、不要なものは外します。
4. Calíopeはキャンバス上のテーブル間の外部キーを自動で検出し、対応するJOINを生成します。
5. 2つのテーブルのあいだに外部キーがなければ、警告のコメント付きでCROSS JOINが挿入されます。
6. 下部のパネルに、リアルタイムで生成されるSQLが表示されます。
7. 「エディタに挿入」を押すと、SQLがSQLエディタに送られます。Macでは新しいタブに、iPad、iPhone、Apple Vision Proでは、エディタが前面に出て、それまでの内容の代わりにSQLが入ります。

キャンバスのオプション

コントロール説明
JOINの種類キャンバスのすべてのJOINをINNER、LEFT、RIGHTのあいだで切り替えます
別名テーブル名の隣の青い別名をクリックすると名前を変えられます。returnキーで確定します
すべてを選択 / すべての選択を解除各カードの下部にあります
キャンバスを消去キャンバスからすべてのテーブルを取り除きます
データベース上部のメニューでデータベースを切り替えます。キャンバスにテーブルがあると、キャンバスが破棄されるので先に確認を求めます
コピー「エディタに挿入」の隣にあり、生成されたSQLをコピーします

注記
- JOINは、サーバが各テーブルについて宣言する外部キーから作られます。外部キーがないところでは、テーブルはコメント付きのCROSS JOINとして入り、エディタで調整します。
- 生成されたSQLは出発点です。挿入したあとは自由に編集できます。

macOS、iPad、iPhone、Apple Vision Proで使えます。

条件(WHERE)

キャンバスとSQLのあいだに、クエリーを絞り込む折りたためる「条件」セクションがあります。「条件を追加」を押し、列、演算子、値を選びます。

項目働き
演算子=、!=、>、<、>=、<=、LIKE、NOT LIKE、IN、NOT IN、BETWEEN、IS NULL、IS NOT NULL。数値の列ではLIKEは提供されません。
引用符列の宣言された型で決まります。varcharは、値が数値に見えても引用符で囲まれます。
INカンマ区切りの値。値にカンマが含まれる場合は単一引用符で囲みます:'Pérez, Ana', Luis。
{}ボタン値をリテラルではなくSQL式として扱います。別の列(p.fecha)や関数(NOW())です。
AND / OR接続詞は行ごとです。混ぜると、SQLは明示的な括弧付きで出力されるので、優先順位は読んだとおりになります。

半分しか埋めていない条件でもクエリーは壊れません。一覧で印が付き、SQLからは外されます。

外部結合の警告

LEFT JOINやRIGHT JOINで、NULLになりうる側をWHEREで絞り込むと、対応のない行がちょうど捨てられ、JOINはINNERのように振る舞ってしまいます。そうなると条件に印が付き、「ONに移動」が提供されます。条件を結合条件の中に移し、孤立した行を残します。IS NULLでは警告は出ません。それは「対応のないもの」を探すための意図的なパターンだからです。

テーブルのパネルのヘッダには名前で絞り込む欄があります。テーブルの多いデータベースでは、見つかるまでスクロールする代わりに名前の一部を入力します。アプリのほかの場所で使うのと同じスキーマツリーで、アクティブなデータベースに限定したものです。

SQL Server

SQL Serverでは、パネルには同じデータベースのほかのスキーマも、それぞれ独自のノードとして表示されます。外部キーはスキーマをまたぐことがあり(rrhh.empleados → dbo.clientes)、それでもJOINは同じように出力されます。どのテーブルも先頭にスキーマを付けて書かれ([rrhh].[empleados])、アクティブなスキーマ以外のスキーマのテーブルは、カードに完全な名前が表示されます。

Apple Vision Pro:テーブルは、その「+」をピンチして動かすとキャンバスにドラッグされます。

キーワード: クエリービルダー、ビジュアル、SELECT、JOIN、INNER JOIN、LEFT JOIN、外部キー、ドラッグ、キャンバス、テーブル、列、クエリー、生成されたSQL、WHERE、条件、フィルタ、演算子、AND、OR、BETWEEN、LIKE、IN、NULL、外部結合、ON

エディタのミニマップ

スクリプト全体の縮小表示と、現在位置の表示。

場所: SQLエディタ › 設定 → テキストエディタ

ミニマップは、エディタの内容全体を縮小して右の余白に表示します。半透明の青い帯が、スクリプトのどの部分がいまメインの領域に見えているかを示します。

オンにするには:
- macOS:メニュー「Calíope」→「設定」→「テキストエディタ」→「ミニマップを表示」。
- iPad:アプリの「設定」→ 同じオプション。

ミニマップでの移動:
- ミニマップのどこかをクリック / タップすると、エディタがスクリプトのその位置までスクロールします。
- ミニマップの上をドラッグすると、連続して移動できます。
- ミニマップは入力時とスクロール時に自動で更新されます。

表示のしかた:
スクリプトの各行は、行の長さに比例した幅(80文字を基準に正規化)の横棒として表示されます。自動折り返しで複数の行に分かれた長い行も、1本の棒として表示されます。色はエディタのテキストの色を薄くしたもので、シンタックスハイライトの色は再現しません。

大きさ:
- macOS:デフォルトのフォントサイズで、エディタの右の余白に幅80 pt。フォントに合わせて大きくなります。
- iPad:デフォルトのサイズで幅64 pt。こちらもフォントに合わせて大きくなります。テキストの領域は覆われないよう自動で調整されます。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: ミニマップ、マップ、全体像、ナビゲーション、スクリプト全体、スクロール、右の余白、位置

SQLファイルをドラッグして開く

.sqlや.txtのファイルをワークスペースに直接ドラッグして、新しいエディタタブで開きます。

場所: ワークスペース › SQLエディタ

SQLファイルをドラッグして開く

.sqlや.txtのファイルは、メニューやファイルの選択を使わずに、Calíopeのワークスペースのウインドウに直接ドラッグして開けます。

macOSでの方法:
1. Finderを開き、.sqlファイルを見つけます。
2. ファイルをCalíopeのワークスペースのメインの領域にドラッグします。
3. ファイルを領域の上で保持しているあいだ、青い表示が出ます。
4. ファイルをドロップすると、内容が新しいSQLエディタタブで自動的に開きます。

iPadでの方法:
1. 「ファイル」AppをSplit ViewかステージマネージャでCalíopeと並べて開きます。
2. .sqlファイルを「持ち上がる」まで長押しします。
3. Calíopeのワークスペースのほうへドラッグします。
4. エディタの領域にドロップすると、内容が新しいタブで開きます。

受け付ける形式:
- .sqlファイル(どんなSQLスクリプトでも)
- SQLのテキストを含む.txtファイル

ほかの開き方:
- 「ファイル」メニュー →「SQLファイルを開く…」(ショートカット:macOSでは⌘O)
- macOSではDockのアイコンにドラッグ(システムが処理します)
- iPadでは「ファイル」Appから共有 →「Calíopeで開く」

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: ドラッグ、ドロップ、SQLファイル、ファイルを開く、「ファイル」App、Finder、スクリプトの読み込み

ツールバーをカスタマイズする

エディタと結果のツールバーで、ボタンのグループを並べ替えます。

場所: SQLエディタ › カスタマイズ(各バーの左端)

SQLエディタの2つのツールバー、つまりエディタのツールバー(上)と結果のツールバー(下)は、作業の流れに合わせてボタンの順序をカスタマイズできます。

方法:
1. 各ツールバーの左端にある「カスタマイズ」ボタン(3本のスライダのアイコン)を押します。
2. 開いたパネルに、ボタンのグループの一覧が現在の順序で表示されます。
3. 各行をドラッグして好きな順に並べ替えます。
4. 「完了」を押して変更を保存します。

順序は自動で保存され、セッションをまたいで保たれます。デフォルトの順序に戻すには「リセット」ボタンを使います。

エディタのツールバーで使えるグループは、実行、コードの整形、安全とトランザクション、履歴とナビゲーション、SQLの分析、ツール、パフォーマンス、外部接続、フォントサイズです。

結果のツールバーで使えるグループは、区切り文字、出力形式、オプション、フォントサイズ、結果を保存、結果をピン留め、クエリーの分析です。

macOS、iPad、iPhone、Apple Vision Proで使えます。順序はMac用に1つ、iPadとiPhoneで共有するものが1つあります。

キーワード: カスタマイズ、並べ替え、ツールバー、順序、グループ、ドラッグ、ボタン

長時間のクエリーの通知

クエリーが設定した時間のしきい値を超えたときに、システムの通知を受け取ります。

場所: Calíope › 設定 › 一般 → 通知

時間のかかるクエリーを実行し、待つあいだにほかのアプリに切り替えたとき、Calíopeは終わったときにローカル通知を送ることができます。

しきい値の設定:
「設定」›「一般」›「通知」で*長時間のクエリーの完了*をオンにします。しきい値はステッパーで調整します(デフォルト5秒、範囲1〜300秒)。

通知は、送りすぎを避けるため60秒ごとに最大1回です。Calíopeが前面にあっても届きます。アプリが前面にあるあいだ黙る通知は、手動バックアップについての2つだけです。

キーワード: 通知、長時間のクエリー、時間、しきい値、バックグラウンド、アラート

大きな結果セットの通知

クエリーが設定したしきい値より多くの行を返したときに通知を受け取ります。

場所: Calíope › 設定 › 一般 → 通知

クエリーが非常に多くの行を返した場合、Calíopeはローカル通知で知らせることができます。

しきい値の設定:
「設定」›「一般」›「通知」で*通常より大きな結果セット*をオンにします。しきい値はステッパーで調整します(デフォルト10 000行、範囲1 000〜100 000)。

結果は常に画面に表示されます。通知は知らせるだけです。

キーワード: 通知、大きな結果、行、しきい値、量、アラート

高度なセルエディタ(長いテキスト、JSON、バイナリ)

テキスト、JSON、バイナリデータのタブがある専用のシートで、複雑な値を編集します。

場所: 結果 › 右クリック › 高度なセルエディタ…

高度なセルエディタは、グリッドにうまく収まらない値のためのモーダルシートです。長いテキスト(TEXT、MEDIUMTEXT、LONGTEXT)、JSONドキュメント、バイナリの内容(BLOB、VARBINARY)、WKTのジオメトリ、改行を含む文字列が対象です。

開き方
- macOS:セルを右クリックし、「高度なセルエディタ…」を選びます。
- iPadとApple Vision Pro:セルを長押しし、コンテキストメニューから「高度なセルエディタ…」を選びます。

NULLのセルでは開きません。編集する値がないからです。

値ごとの表示
- JSON — 2つのタブ。ハイライトと「JSONを整形」ボタンのある「テキスト」と、オブジェクトと配列を展開する「ツリー」です。テキストが有効なJSONでなくなると、ツリーがそう伝えます。
- バイナリ — 3つのタブ。「16進」は内容を16進数(大文字の2桁ずつ、1行に16バイト)で表示し、ペーストするときは空白、改行、省略可能な0xの接頭辞を受け付けます。「Base64」は標準のBase64(RFC 4648)で表示し、ペーストするときは空白を受け付けます。どちらにも「整形」(有効なバイトをインデントし直す)、「ペースト」(クリップボードから読む)、「リセット」(元の値に戻す)のボタンと、バイト単位のサイズを示すバッジがあります。入力したものがデコードできないと、赤い通知がそう伝え、「OK」ボタンは使えなくなります。
- 画像 — 解釈できれば(PNG、JPEG、GIFなど)、現在のバイトを画像としてプレビューします。「16進」や「Base64」を編集するとすぐに更新されます。画像はズームできます。2本の指でピンチするか、ポインタを重ねてホイールを回すか、下部のボタンを使います。ボタンのあいだにはパーセントが表示され、⌘−、⌘+、⌘0のショートカットもあります。範囲は「100 %(フレームに合わせた画像)」から800 %までです。ダブルクリック(iPadではダブルタップ)で、フレームに合わせた表示と、触れた位置を基準にした200 %とを切り替え、ドラッグすると端から離れずに移動します。
- ジオメトリ — 編集できる欄にWKTと、形式についての注記。
- テキスト — プレーンテキストの編集欄。

OKとキャンセル
- 「OK」は、macOSでは編集した値をクリップボードにコピーします。iPadとApple Vision Proでは、その値を新しい値としてあらかじめ入れた「UPDATEを生成」を開きます。そこで文を確認でき、「実行」をタップするまで実行されません。
- 「キャンセル」は行を変えずに閉じます。iPadでは、値を変更していると、下にスワイプしてもシートは閉じないので、入力したものは失われません。

テキストでないバイト
エディタはバイトをUTF-8の文字列として渡します。有効なUTF-8にならないバイト(たとえば生の0xDEADBEEF)は置換文字に置き換えられます。そのような場合は、UNHEX('…')や0x…のリテラルを使ってUPDATEを手で組み立てるほうがよいでしょう。

キーワード: 高度なセルエディタ、セル、長いテキスト、JSON、BLOB、バイナリ、VARBINARY、16進、JSONを整形、複雑な編集、⌘E、UPDATE、プレビュー

2つのクエリーの結果を比較する

同じクエリーを2つの異なるデータベースまたはサーバで実行し、違いを1行ずつ確認します。

場所: SQLエディタ › 2つのデータベースで実行…

結果の比較ビューでは、1つのクエリーを2つの異なるセッション(たとえば本番環境とステージング、2つのレプリカ)で実行し、違いを1行ずつ、セルごとに確認できます。

比較の始め方
- 1つのセッションでSQLエディタを開き、クエリーを書いて、ビューのツールバーにある「実行 ▸」メニューを展開します。
- 「2つのデータベースで実行…」を選び、比較する2つ目のデータベースまたはサーバを選びます。2つの実行は並列に進みます。
- 終わると、結果グリッドが比較ビューに置き換わります。

概要バー(上部)
- 各データベースの色の付いた2つの「バッジ」:青=プライマリ、オレンジ=セカンダリ。それぞれにセッション名、行数、経過時間(ms)が表示されます。
- 差分の表示:すべて一致していれば緑の✓「一致」、そうでなければ、異なる値の数(N個の値)と片側にしかない行の数(余分な行:M)を示すオレンジの⚠︎。
- 「差分のみ」スイッチ — 違いのある行だけを表示するよう表を絞り込みます。

比較グリッド
- 各行は表示で始まります:
- =(灰色)— 両側で一致する行。
- P(青)— プライマリ側の行。
- S(オレンジ)— セカンダリ側の行。
- 値の異なる行は対になって(上にP、下にS)表示され、食い違うセルは赤(プライマリ)か緑(セカンダリ)で強調表示されます。
- 片側にしかない行は、より濃く色付けした背景で表示されます。

ほかの状態
- 影響を受けた行数 — クエリーがINSERT/UPDATE/DELETEの場合、ビューは大きなカウンタを横に並べ、*影響を受けた行数は同一*のラベルか数の差を表示します。
- 片方または両方のエラー — 実行が失敗した場合、等幅の(選択できる)メッセージ付きのエラーブロックが表示されます。
- 列の不一致 — 2つのクエリーが異なる列の組み合わせを返した場合、余分な列には+、共通の列には✓を付けて横に並べて表示します。

セルのコンテキストメニュー
- 「コピー」— 正確な値をシステムのペーストボードにコピーします。

注記
- 行の順序は各エンジンが返すとおりです。安定した比較のためには、常に明示的なORDER BYを使ってください。
- NULLの値は、NULLという文字どおりのラベル付きで、くすんだ赤で表示されます。

キーワード: 比較、比べる、差分、違い、2つのデータベース、2台のサーバ、プライマリ、セカンダリ、差分のみ、一致する行、影響を受けた行数、列の不一致、デュアル、横並び

空間データを地図で表示・編集する

空間列をどう読み、どう描き、SQLを手で書かずにどう編集するか。

場所: SQLエディタ › 地図

空間列(POINT、LINESTRING、POLYGONとそれぞれの複数形)は、もうバイトの羅列としては表示されません。CalíopeはグリッドにWKTのテキストとして表示し、地図に描きます。

MySQLMariaDBAurora

MySQLとMariaDBでは、GEOMETRY列かそのサブタイプのいずれかで、テキストはST_AsTextが書くものとまったく同じです。

TiDB

TiDBには空間型がない(GEOMETRY列を拒否する)ので、TiDBではこのパネルは表示されません。

PostgreSQL

PostgreSQLでは、PostGISのgeometry列かgeography列で、テキストはST_AsTextが書くものです。曲線と、ZやMを持つ座標は読みません。セルにはそのバイトが残ります。

SQL Server

SQL Serverでは、geography列かgeometry列で、テキストはSTAsText()が書くものです。曲線(CIRCULARSTRING、COMPOUNDCURVE、CURVEPOLYGON)、FULLGLOBE、ZやMを持つ座標は読みません。セルにはそのバイトが残ります。

Oracle

OracleのSDO_GEOMETRY列は、Calíopeがデコードしないオブジェクト型です。セルがそう伝え、地図はありません。座標を読むには、SDO_UTIL.TO_WKTGEOMETRY(column)でサーバにテキストを求めてください。

地図を開く

空間列が少なくとも1つある結果では、結果バーの「地図」ボタンでグリッドの下にパネルが開きます。グラフやターミナルと同じように、区切りをドラッグしてエディタのほかの部分と高さを分け合います。

結果に空間列が複数ある場合は、左の選択でどれを描くかを選びます。ポイントはピンとして、ラインとポリゴンは線として表示され、穴のあるポリゴンは穴ごと描かれます。

描かれないものは、そう示されます

パネルの下部には、結果の行と地図上のものとの差を説明する数が表示されます。ジオメトリのない行の数、描画の上限(ジオメトリ1万件)を超えた行の数、読めなかった行の数です。表示されない行が黙って消えることはありません。

編集

モードの選択には3つの位置があります。「探索」では見るだけです。「移動」ではピンをドラッグできます。ドロップすると、CalíopeはUPDATEを組み立て、実行する前に表示します。「適用」を押すまで何も書き込まれず、キャンセルするとピンは元の場所に戻ります。「追加」では、地図をタップすると新しいジオメトリのINSERTを提案します。

「移動」モードでラインやポリゴンを選ぶと、その頂点が表示されます。丸い頂点はドラッグして動かし、各線分の中間にある+の付いた頂点はドラッグすると新しい頂点を作ります。ポリゴンのリングは自動で閉じたままになります。

「消去」ボタンは、行を削除せずに、選択した行のジオメトリをNULLにします。

編集できないとき

モードの選択の代わりに南京錠が表示されている場合、地図は読み出し専用です。理由は2つあり、Macではポインタを重ねたとき、iPad、iPhone、Apple Vision Proでは南京錠をタップしたときに表示されます。クエリーからどのテーブルに書き込むかがはっきりしない(JOIN、ビュー、サブクエリー)か、結果に信頼できる主キーがないかです。主キーがないとUPDATEが複数の行に届くおそれがあるので、Calíopeはそれを提供しないことを選びます。たいていは、SELECTに主キーを加えれば足ります。

座標の順序

POINT(a b)で2つの数のどちらが緯度かは、サーバと参照系によって決まり、これは小さな問題ではありません。逆にすると、マドリードの点がインド洋に行ってしまいます。SRID 4326のMySQL 8は緯度を先に書きます。EPSG:4326がそう宣言しているからです。MariaDBとSRID 0は経度を先に書きます。PostGISとSQL Serverは、SRIDにかかわらず常に経度を先に書きます。Calíopeはこれを自分で解決し、サーバと同じ順序で表示し、書き込みます。そのため、セルのテキストは同じサーバでST_AsTextが返すものと常に一致します。

キーワード: 空間、GIS、地図、ジオメトリ、ポイント、ポリゴン、ラインストリング、座標、緯度、経度、SRID、WKT、位置情報、MapKit

エディタのスキーマパネル

SQLエディタの右側にドッキングしたスキーマツリー。

場所: SQLエディタ › スキーマパネル

SQLエディタは、タブの右側に独自のスキーマパネルを持っています。ほかのツールが描くのと同じツリーをエディタの横にドッキングしたもので、テーブル名を調べるためにタブを離れる必要はありません。

表示と非表示。エディタのツールバーの最初のボタン「スキーマパネルを表示/非表示」がパネルの表示を切り替え、開いているあいだは金色になります。パネル自身のヘッダの右側にも同じボタンがあります。Calíopeは選択を覚えているので、パネルは閉じたときのまま戻ってきます。iPhoneでは、パネルはエディタの上にシートとして開き、毎回閉じた状態で始まります。

ヘッダには、タイトル「スキーマ」と「DDL履歴」ボタンがあり、ボタンはCalíopeが代わりに実行したDDL文のログを開きます。

ここでのツリーの働き。テーブルやビューをクリックすると、Calíopeはそれに対するSELECT * FROMを書いて、いまいるタブで実行します。データベースをクリックすると、それがアクティブになります。USEと同じことです。コンテキストメニューには、エディタにしかない3つの項目が加わります:SELECT * FROM、「データを読み込む…」、「WHEREを作成…」。

パネルは、タブがサーバに接続しているあいだだけ描かれます。

ClickHouse

ClickHouseでは、ツリーは各データベースを「テーブル」、「ビュー」、「マテリアライズドビュー」、「ディクショナリ」にまとめます。

Oracle

Oracleでは、ツリーはスキーマを並べ、各スキーマはそのオブジェクトを「テーブル」、「ビュー」(マテリアライズドビューを含む)、「ルーチン」(パッケージを含む)、「トリガー」、「シーケンス」にまとめます。スキーマをクリックすると、OracleにはないUSEを使わずにそれがアクティブになり、エディタは修飾のない名前をそこで解決します。シーケンスはデータを開かず、メニューにSELECT * FROMはありません。

キーワード: スキーマパネル、サイドバー、インスペクタ、ツリー、スキーマツリー、スキーマを表示、スキーマを隠す、DDLの履歴、SELECT FROM、データの読み込み、WHEREビルダー

実行中のクエリーの進捗

文の実行中に読み込んだ量を伝えるエンジンでは、エディタのバーの下に読み込んだ行数とバイト数が表示されます。

場所: ワークスペース › ツール › SQLエディタ

文の実行中、SQLエディタはどこまで進んだかを表示できます。エディタのバーの下、停止ボタンの隣に、それまでに読み込んだ行数とバイト数、サーバが総量を把握していればパーセントを示す行が表示されます。この行はクエリーの実行中に更新され、終わると消えます。

表示されるのは、文の実行中に進捗を伝えるエンジンの場合だけです。それ以外のエンジンでは行は描かれず、エディタは結果を待つだけです。

ClickHouse

ClickHouseでは、数値はsystem.processesから読み取られ、同じ数値がアクティビティセンターにも表示されます。

キーワード: 進捗、読み込んだ行数、読み込んだバイト数、実行中のクエリー

識別子の引用符を挿入する

Mac以外では、キーボードのコマンドと編集メニューの操作で、語や選択範囲を接続中のエンジンが名前に使う引用符で囲みます。

場所: ワークスペース › ツール › SQLエディタ

Mac以外では、SQLエディタに、カーソル位置の語または選択したテキストを接続中のエンジンの識別子の引用符で囲む操作があります。空白を含む名前や予約語を、そのまま使えるようにするためです。

- ハードウェアキーボードでは:⌃⇧B。⌘を押し続けると、一覧に「識別子の引用符を挿入」として表示されます。
- キーボードがなければ:テキストを長押しし、メニューで「識別子の引用符を挿入」を選びます。

Macのエディタにはこの操作はありません。

キーワード: 引用符、バッククォート、識別子、予約語、キーボード

エディタと結果のフォントサイズ

エディタのバーと結果のバーにあるA−とA+のボタンで、それぞれのサイズを別々に変えます。ピンチでも変えられます。

場所: ワークスペース › ツール › SQLエディタ

SQLのテキストと結果グリッドのサイズは別々です。エディタのバーの「A−」と「A+」のボタンはSQLのサイズを、結果のバーのボタンはグリッドのサイズを変えます。それぞれのサイズは最小と最大のあいだに収まり、Calíopeは次回のためにそれを覚えています。

エディタやグリッドの上でピンチしても(トラックパッドや画面で2本の指を使って)、そのサイズを変えられます。

キーワード: フォントサイズ、文字の大きさ、ズーム、ピンチ、結果

結果をプリントする

Macでは、SQLエディタが前面にあるときに⌘Pを押すと、行数の上限まで結果グリッドをプリントし、省いた行の数を伝えます。

場所: キーボードショートカット: ⌘P

Macでは、SQLエディタが前面にあり結果が画面に出ているときに⌘Pを押すと、結果グリッド(列のヘッダと行)を上限までプリントします。結果の行数がそれより多い場合、印刷物の最後に省いた行の数が示されます。すべての行を残したいなら、代わりに結果を書き出してください。

結果のプリントはMacの機能です。

キーワード: プリント、印刷物、結果、グリッド、用紙

データの編集を取り消す

⌘ZはSQLエディタのグリッドで最後に編集したセルか最後に削除した行を取り消し、⇧⌘Zはそれをやり直します。

場所: キーボードショートカット: ⌘Z

SQLエディタの結果グリッドでセルを編集したり行を削除したりすると、Calíopeは変更をサーバに書き込み、それを元に戻す文を保持します。⌘Zは最後の変更を取り消し(古い値を書き戻すか、削除した行をもう一度挿入します)、⇧⌘Zはそれをやり直します。

取り消せるのは、特定できるものだけです。行がテーブルから来ていて、そのテーブルの主キーを含んでいる必要があります。そうでなければ、変更はそのまま残り、Calíopeは取り消せない理由を伝えます:

- 「取り消せません:クエリーからは、その行がどのテーブルから来たのかわかりません。」
- 「取り消せません:この結果にはテーブルの主キーが含まれていません。」
- 「取り消せません:この行のキーがNULLのため、1行を特定できません。」

キーワード: 取り消す、やり直す、編集、セル、行を削除、主キー

ビルダーのキャンバスは、ツールを切り替えても残る

クエリービルダーのテーブル、別名、チェックした列、条件、SQLは、ほかのツールから戻っても残っています。

場所: ワークスペース › ツール › クエリービルダー

クエリービルダーのキャンバス上のテーブル、その別名、チェックした列、条件、生成されたSQLは、ほかのツールから戻ってもそのまま残っています。これらはビューではなくワークスペースに属しているからです。ビルダーのタブかセッションを閉じると破棄されます。

別のデータベースに切り替えてもキャンバスは空になり、テーブルがある場合はCalíopeが先に確認を求めます。

キーワード: クエリービルダー、キャンバス、保持、ツールの切り替え、データベース

列のプロファイラ

結果の列の詳しい統計情報:最小値、最大値、平均値、NULL、異なる値、上位の値。

場所: 結果グリッド › 右クリック › 列「…」をプロファイル…

列のプロファイラは、SQLクエリーの結果の任意の列の値を分析します。

開き方:
- macOS:結果グリッドの列見出しを右クリックして、「列「…」をプロファイル…」を選びます。
- iPad:結果バーの「列をプロファイル」ボタンをタップすると、列を選ぶパネルが開きます。

表示される情報:
- 合計行数、NULLの件数と割合
- 異なる値の数と割合
- 最小値、最大値、平均値(数値の列の場合)
- 出現回数の多い上位8個の値と棒グラフ

計算はすでに読み込まれた行に対して行われ、サーバに追加のクエリーは送りません。

キーワード: 列のプロファイラ、統計、最小値、最大値、平均値、NULL、異なる値、ヒストグラム、頻度

実行プロファイル(SHOW PROFILE)

クエリーの内部フェーズを、それぞれの実行時間とともに分解して表示します。

場所: SQLエディタ › プロファイル

「クエリープロファイラ」は、SET profiling = 1とSHOW PROFILE FOR QUERY n(MySQL/MariaDBの構文)を使って、クエリーを実行するときのMySQL内部のフェーズの内訳を取得します。

有効にするには:SQLエディタの結果バーで「プロファイル」ボタンをクリックします。Calíopeは現在のクエリーを再実行し、フェーズ(解析、最適化、実行、データ送信など)をそれぞれの所要時間(ミリ秒)とともに表示します。

横棒グラフで、いちばんコストの高いフェーズがひと目でわかります。「%」の列は、各フェーズが合計時間のどれだけを占めるかを示します。50%を超えるフェーズは赤で示されます。

注記:SHOW PROFILEには、サーバの変数have_profiling = YESが必要です。非推奨になった最近のMySQL 8.0以降では使えないことがあります。その場合は実行計画ビューアを使ってください。

ClickHouse

ClickHouseにはSHOW PROFILEがありません。「プロファイル」はクエリーを実行し、system.query_logにあるその行を読みます。そこには準備のフェーズと実行が、それぞれの所要時間とともに入っています。お使いのアカウントでクエリーログが無効になっている場合は、そう表示されます。

Oracle

Oracleには「プロファイル」がありません。それにあたるSQLトレースはサーバのディスクにファイルを書き出し、アプリはそれを読みません。クエリーの計画は「EXPLAIN」から得られます。

キーワード: SHOW PROFILE、プロファイリング、フェーズ、実行、解析、最適化、データ送信、パフォーマンス

インデックスアドバイザ

実行計画のフルスキャンを検出し、CREATE INDEX文を提案します。

場所: SQLエディタ › インデックス

インデックスアドバイザは、現在のクエリーの実行計画を取得し、その中からテーブルのフルスキャンを探します。

使いかた:結果のツールバーで「インデックス」をクリックします。Calíopeは次のものを表示します。

1. ノードごとに翻訳した実行計画。実行計画ビューアと同じ用語と同じ色で示し、フルスキャンは赤で表示されます。
2. 提案。理由と、SQLを「SQLをコピー」するボタン、「エディタに挿入」するボタンが付きます。クエリーがどのインデックスにも含まれない列で絞り込んでいる場合、提案はその列へのCREATE INDEXです。どの列でも絞り込んでいない場合、スキャンを避けられるインデックスはないので、役に立たないインデックスを提案する代わりに、提案はそのことをコメントで伝えます。

フルスキャンがなければ、緑のバッジが表示されます。アドバイザが扱うのは最もよくあるケースです。行数や詳細を含むツリー全体を見るには、実行計画ビューアを使ってください。

ClickHouse

ClickHouseではCREATE INDEXは提案しません。ソートキーに含まれない列で絞り込んでいる場合は、列の型に応じてスキップインデックス(ALTER TABLE … ADD INDEX … TYPE minmax、set(100)またはbloom_filterと、MATERIALIZE INDEX)を提案し、値がキーに沿ってまとまっている場合にしか効果がないことを警告します。キーで絞り込んでいてもグラニュールを1つもスキップしていない場合はそのことを伝え、キーは変更できないので、クエリーの書き換えかテーブルの作り直しを提案します。グラニュールが1つだけのテーブルには提案はなく、そのことが示されます。

Oracle

Oracleでは、アドバイザは列だけでなく実行計画の述語を読みます。%や_で始まるLIKEはどのBツリーインデックスでも解決できないので、CREATE INDEXは提案せず、その理由を示します。その列がすでにインデックスの先頭にあるのにテーブル全体が読まれている場合は、別のインデックスを提案する代わりにそのインデックスを示し、「テーブルメンテナンス」で統計情報を収集することを勧めます。提案するインデックスはBツリーで、スキーマを前に付けます。

TiDB

TiDBでは、アドバイザは各TableFullScanの上にあるSelection演算子の条件を読みます。クエリーがテーブルにエイリアスを付けている場合、実行計画はエイリアスでテーブルを示すので、アドバイザはそのテーブルにはインデックスを提案しません。エイリアスに対するCREATE INDEXは失敗するからです。

キーワード: EXPLAIN、インデックス、フルスキャン、FULL TABLE SCAN、CREATE INDEX、最適化、パフォーマンス、アドバイザ

結果のグラフ

クエリーの結果を棒グラフ、折れ線グラフ、円グラフで可視化します。

場所: SQLエディタ › グラフ

「結果のグラフ」は、SELECTクエリーの行をSwift Chartsでインタラクティブなグラフに変換します。

表示するには:データを返すクエリーを実行し、結果バーの「グラフ」をクリックします。グリッドの下にグラフのパネルが表示されます。

コントロール:
- 「種類」:棒、折れ線、円
- 「X軸」:ラベルに使う列(推奨:テキストか日付)
- 「Y軸」:グラフにする数値の列
- 「最大」:グラフにする最大行数(5〜500)

グラフは数値の列を自動で見つけ、いちばん妥当な値を選びます。macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: グラフ、棒グラフ、折れ線グラフ、円グラフ、可視化、Swift Charts、結果、チャート

クエリーのベンチマーク

SQLクエリーの実行時間を複数回の繰り返しで測り、詳しい統計を示します。

場所: SQLエディタ › ベンチマーク

ベンチマークは、使用中のエディタのクエリーをN回実行してパフォーマンスの統計を計算します。実行時間のばらつきを見つけたり、インデックスや構造の変更の影響を評価したりできます。

開き方:
SQLエディタのツールバーにあるベンチマークボタン(ストップウォッチのアイコン)を押します。使用中のクエリーのSQLが読み込まれた状態でシートが開きます。

コントロール:
- 「繰り返し回数」:ステッパでクエリーを実行する回数を選びます(1〜1000、10刻み)。デフォルトは10回です。
- 「ベンチマークを開始」:実行を始めます。エディタが空の場合、ボタンは無効になります。
- 「停止」:実行中の計測をキャンセルし、その時点までの結果を残します。

表示される指標:
- 合計:すべての実行時間の合計(ミリ秒)。
- 平均:実行時間の算術平均。
- 最小:最も速かった実行。
- 最大:最も遅かった実行。
- 標準偏差:値が大きいと、時間にばらつきがあることを示します(サーバでの競合や負荷の変動の可能性があります)。

棒グラフ:各棒は1回の繰り返しを表します。棒は緑(速い)、黄(中間)、赤(遅い。最大の66%を超えるもの)で色分けされ、外れ値をひと目で見つけられます。

使い道:
- インデックスの作成前と作成後でクエリーの時間を比べる。
- 負荷がかかってもサーバの応答が安定しているかを確かめる。
- WHERE句やJOINの変更の影響を測る。

macOS、iPad、iPhone、Apple Vision Proで使えます。

キーワード: ベンチマーク、パフォーマンス、繰り返し、時間、統計、平均、最小、最大、標準偏差、ストップウォッチ、測定