MySQL Shell 8.0  /  MySQL Shell コードの実行  /  コード自動補完

このページは機械翻訳したものです。

5.3 コード自動補完

MySQL Shell では、「タブ」キーを押してカーソルの前のテキストの自動補完をサポートしています。 セクション3.1「MySQL Shell のコマンド」 は、任意の言語モードで自動補完できます。 たとえば、\con と入力し、Tab キーを押すと、\connect がオートコンプリートされます。 自動補完は、現在の セクション5.1「アクティブな言語」 に応じて、SQL、JavaScript および Python 言語のキーワードに使用できます。

オートコンプリートでは、次のテキストオブジェクトがサポートされます:

  • SQL モード - 自動補完では、現在アクティブなスキーマのスキーマ名、テーブル名、カラム名が認識されます。

  • JavaScript および Python モードでは、自動補完はオブジェクトメンバーを認識します。次に例を示します:

    • session, db, dba, shell, mysql, mysqlx などのグローバルオブジェクト名。

    • session.connect()dba.configureLocalInstance() などのグローバルオブジェクトのメンバー。

    • グローバルユーザー定義変数

    • shell.options.verbose などの連鎖オブジェクトプロパティ参照。

    • col.find().where().execute().fetchOne() などの連鎖した X DevAPI メソッドコール。

デフォルトでは、自動補完は有効になっています。この動作を変更するには、オートコンプリートの構成 を参照してください。

オートコンプリートをアクティブにすると、カーソルの前のテキストが 1 つの一致する可能性がある場合、そのテキストは自動的に入力されます。 オートコンプリートで複数の一致が見つかると、端末がビープ音を鳴らすか点滅します。 Tab キーを再度押すと、使用可能な完了のリストが表示されます。 一致するものが見つからない場合、自動補完は行われません。

自動補完 SQL

MySQL Shell が SQL モードの場合、オートコンプリートは、一致する可能性のあるすべての完了を含む単語を完了しようとします。 SQL モードでは、次を自動完了できます:

  • SQL キーワード - 既知の SQL キーワードのリスト。 照合では大文字と小文字は区別されません。

  • SQL スニペット - SHOW CREATE TABLE, ALTER TABLE, CREATE TABLE など、特定の共通スニペット。

  • テーブル名 - アクティブなスキーマがあり、データベース名キャッシュが無効になっていない場合、アクティブなスキーマのすべてのテーブルが可能な補完として使用されます。

特別な例外として、バックティックが見つかった場合は、テーブル名のみが完了とみなされます。 SQL モードでは、自動補完はコンテキストに対応していません。つまり、SQL 文法に基づく補完のフィルタリングはありません。 つまり、オートコンプリート SELSELECT を返しますが、selfies というテーブルを含めることもできます。

JavaScript および Python の自動補完

JavaScript モードと Python モードの両方で、完了する文字列は、「タブ」が押されたときに現在のカーソル位置から右から左に決定されます。 メソッドコール内のコンテンツは無視されますが、構文的に正しい必要があります。 つまり、文字列、コメントおよびネストされたメソッドコールはすべて適切にクローズされ、バランスがとれている必要があります。 これにより、連鎖メソッドを適切に処理できます。 たとえば、次のように発行するとします:

print(db.user.select().where("user in ('foo', 'bar')").e

「タブ」キーを押すと、自動補完でテキスト db.user.select().where().e の完了が試行されますが、この無効なコードでは未定義の動作が発生します。 . で区切られたトークン間の空白 (改行を含む) は無視されます。

オートコンプリートの構成

デフォルトでは、自動完了エンジンは有効になっています。 このセクションでは、オートコンプリートを無効にする方法および\rehash MySQL Shell コマンドの使用方法について説明します。 オートコンプリートでは、MySQL Shell が認識しているデータベース名オブジェクトのキャッシュが使用されます。 オートコンプリートが有効な場合、この名前キャッシュは自動的に更新されます。 たとえば、スキーマをロードするたびに、自動補完エンジンはスキーマ内のテキストオブジェクトに基づいて名前キャッシュを更新し、テーブル名などをオートコンプリートできるようにします。

この動作を無効にするには、次のようにします:

  • --no-name-cache コマンドオプションを使用して MySQL Shell を起動します。

  • MySQL Shell の実行中に自動補完が無効になるように、shell.optionsautocomplete.nameCache および devapi.dbObjectHandles キーを変更します。

オートコンプリート名キャッシュが無効になっている場合は、\rehash を発行して、テキストオブジェクトのオートコンプリートが認識するように手動で更新できます。 これにより、現在アクティブなスキーマに基づいて名前キャッシュが強制的にリロードされます。

MySQL Shell の実行中にオートコンプリートを無効にするには、次の shell.options キーを使用します:

  • autocomplete.nameCache: boolean は、SQL で使用するオートコンプリート名キャッシュを切り替えます。

  • devapi.dbObjectHandles: boolean は、db.mytabledb.mycollection などの X DevAPI db オブジェクトで使用するオートコンプリート名キャッシュを切り替えます。

両方のキーがデフォルトで true に設定され、--no-name-cache コマンドオプションが使用されている場合は false に設定されます。 MySQL Shell の実行中に SQL のオートコンプリート名キャッシュを変更するには、次のコマンドを発行します:

shell.options['autocomplete.nameCache']=true

\rehash コマンドを使用して、名前キャッシュを手動で更新します。

MySQL Shell の実行中に JavaScript および Python のオートコンプリート名キャッシュを変更するには、次のコマンドを発行します:

shell.options['devapi.dbObjectHandles']=true

再度、\rehash コマンドを使用して、名前キャッシュを手動で更新できます。