Spec-Zone.ru › MySQL Shell 8.4

5.3 Автозаполнение кода

MySQL Shell поддерживает автозаполнение текста, предшествующего курсору, при нажатии клавиши Tab. Раздел Раздел 3.1, «Команды MySQL Shell» можно автозаполнять в любом режиме языка. Например, введя \con и нажав клавишу Tab, автозаполнение завершается как \connect. Автозаполнение доступно для ключевых слов SQL, JavaScript и Python в зависимости от текущего Раздела 5.1, «Активный язык».

Автозаполнение поддерживает следующие объекты текста:

  • В режиме SQL автозаполнение учитывает имена схем, имена таблиц, имена столбцов текущей активной схемы.

  • В режимах JavaScript и Python автозаполнение учитывает члены объектов, например:

    • имена глобальных объектов, такие как session, db, dba, shell, mysql, mysqlx и так далее.

    • члены глобальных объектов, такие как session.connect().

    • глобальные пользовательские переменные

    • ссылки на свойства цепочек объектов, такие как shell.options.verbose.

    • цепочки вызовов методов X DevAPI, такие как col.find().where().execute().fetchOne().

По умолчанию автозаполнение включено. Чтобы изменить это поведение, см. Настройка автозаполнения.

После активации автозаполнения, если текст, предшествующий курсору, имеет ровно одно возможное совпадение, текст автоматически заполняется. Если автозаполнение находит несколько возможных совпадений, оно издает звуковой сигнал или мигает терминалом. Если снова нажать клавишу Tab, отображается список возможных дополнений. Если совпадений не найдено, автозаполнение не выполняется.

  • Автозаполнение SQL

  • Автозаполнение JavaScript и Python

  • Настройка автозаполнения

Автозаполнение SQL

В режиме SQL автозаполнение с учетом контекста заполняет любое слово с соответствующими дополнениями. Можно автозаполнять:

  • Схемы

  • Таблицы

  • Виды

  • Столбцы

  • Сохранённые процедуры

  • Функции

  • Триггеры

  • События

  • Двигатели

  • Пользовательские функции

  • Функции выполнения

  • Группы файлов журналов

  • Переменные пользователя

  • Системные переменные

  • Пространства таблиц

  • Пользователи

  • Наборы символов

  • Сортировки

  • Плагины

Если вы подключаетесь к экземпляру MySQL, но не выбираете схему, автозаполнение доступно для глобальных объектов, наборов символов, двигателей, схем и так далее. Например, в стандартной установке MySQL, USE предлагает имена всех обнаруженных схем, если не указана одна или несколько релевантных букв имени схемы:

         SQL > use
         information_schema  mysql  performance_schema  sys

      

Если схема выбрана, дополнительная информация о схеме загружается и доступна для автозаполнения (таблицы, события и т. д.). Если вы переключаетесь со схемы на другую, объекты, загруженные из предыдущей схемы, остаются доступными для автозаполнения. Однако любой новый объект, добавленный во время сессии, не будет доступен для автозаполнения, пока не будет выполнена команда \rehash.

Чтобы получить список предложений или дополнить частичное слово из выбранной схемы, введите начальный фрагмент и дважды нажмите клавишу Tab. Например:

  1. В приглашении SQL введите следующий фрагмент: SE.

  2. Дважды нажмите клавишу Tab.

    Ниже вашего ввода отображаются следующие предложения:

                SET SELECT
              
  3. В приглашении SQL введите следующий фрагмент: SEL.

  4. Дважды нажмите клавишу Tab.

    Фрагмент автозаполняется до SELECT.

Если результатов много, вас попросят отобразить результаты или нет. Например:

Display all 118 possibilities? (y or n)
      

API автозаполнения SQL

API автозаполнения предоставляется разработчикам через следующие функции:

  • JavaScript: shell.autoCompleteSql(statement, options)

  • Python: shell.auto_complete_sql(statement, options)

statement: "string"

Частичное SQL-предложение для автозаполнения.

Они возвращают возможные кандидаты для автозаполнения.

Параметры:

serverVersion: "string"

Обязательный. Версия грамматики сервера. Формат: major.minor.patch. serverVersion:"8.0.31", например.

sqlMode: "string"

Обязательный. Режим SQL. Строка, разделённая запятыми, sqlMode: "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION", например. Для получения дополнительной информации см. .

statementOffset: number

Необязательный. Нулевая позиция курсора в предложении. Значение по умолчанию — длина предложения.

uppercaseKeywords: [true|false]

По умолчанию true. Возвращать ли ключевые слова в верхнем регистре.

filtered: [true|false]

По умолчанию true. Фильтровать ли явные имена кандидатов в результате с использованием префикса, который автозаполняется.

Эта функция возвращает словарь, описывающий кандидатов для автозаполнения предложения, используя следующий синтаксис:

        {
         "context": {
           "prefix": string,
           "qualifier": list of strings,
           "references": list of dictionaries,
           "labels": list of strings,
         },
         "keywords": list of strings,
         "functions": list of strings,
         "candidates": list of strings,
        }
           
  • context: контекст операции автозаполнения.

  • prefix: фрагмент, который автозаполняется.

  • qualifier: присутствует, если доступно квалифицированное имя.

    Например:

    • SELECT s: префикс 's', квалификатор отсутствует.

    • SELECT schema1.t: префикс 't', квалификатор ['schema1'].

    • SELECT schema1.table1.c: префикс 'c', квалификатор ['schema1','table1'].

    • SELECT schema1.table1.column1 FR: префикс 'FR', квалификатор отсутствует.

  • references: ссылки, обнаруженные в предложении.

    • schema: имя схемы.

    • table: имя таблицы, на которую ссылается предложение.

    • alias: псевдоним таблицы.

  • labels: метки в меткированных блоках.

  • keywords: предложения ключевых слов-кандидатов.

  • functions: кандидаты функций библиотеки MySQL (runtime), имена которых также являются ключевыми словами.

  • candidates: список одного или нескольких поддерживаемых кандидатов. Схемы, таблицы, виды и т.д.

Например:

          JS > shell.autoCompleteSql("select * from  ",{serverVersion: "8.0.30", sqlMode: "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"})
            {
                "candidates": [
                    "schemas",
                    "tables",
                    "views"
                ],
                "context": {
                    "prefix": ""
                },
                "functions": [
                    "JSON_TABLE()"
                ],
                "keywords": [
                    "DUAL",
                    "LATERAL"
                ]
            }
      

Автозаполнение JavaScript и Python

В режимах JavaScript и Python строка для автозаполнения определяется справа налево, начиная с текущей позиции курсора при нажатии Tab. Содержимое внутри вызовов методов игнорируется, но должно быть синтаксически правильным. Это означает, что строки, комментарии и вложенные вызовы методов должны быть правильно закрыты и сбалансированы. Это позволяет правильно обрабатывать цепочки методов. Например, при вводе:

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

Нажатие клавиши Tab приведет к попытке автозаполнения текста db.user.select().where().e, но этот некорректный код приводит к неопределенному поведению. Любые пробелы, включая символы новой строки, между токенами, разделёнными ., игнорируются.

Настройка автозаполнения

По умолчанию механизм автозаполнения включен. В этом разделе объясняется, как отключить автозаполнение и как использовать команду MySQL Shell \rehash. Автозаполнение использует кэш имен баз данных, о которых MySQL Shell имеет информацию. При включенном автозаполнении этот кэш имен автоматически обновляется. Например, при загрузке схемы движок автозаполнения обновляет кэш имен на основе текстовых объектов, найденных в схеме, так что вы можете автоматически заполнять имена таблиц и т. д.

Для отключения этого поведения можно:

  • Запустить MySQL Shell с опцией команды --no-name-cache.

  • Изменить ключи autocomplete.nameCache и devapi.dbObjectHandles в shell.options для отключения автозаполнения во время работы MySQL Shell.

Когда кэш имен автозаполнения отключен, вы можете вручную обновить текстовые объекты, о которых автозаполнение имеет информацию, вызвав \rehash. Это принудительно перегружает кэш имен на основе текущей активной схемы.

Для отключения автозаполнения во время работы MySQL Shell используйте следующие ключи shell.options:

  • autocomplete.nameCache: boolean включает/отключает кэширование имен автозаполнения для использования SQL.

  • devapi.dbObjectHandles: boolean включает/отключает кэширование имен автозаполнения для использования объектом X DevAPI db, например, db.mytable, db.mycollection.

Оба ключа по умолчанию установлены в true и устанавливаются в false, если используется опция команды --no-name-cache. Для изменения кэширования имен автозаполнения для SQL во время работы MySQL Shell выполните:

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

Используйте команду \rehash для ручного обновления кэша имен.

Для изменения кэширования имен автозаполнения для JavaScript и Python во время работы MySQL Shell выполните:

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

Опять же, вы можете использовать команду \rehash для ручного обновления кэша имен.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-8.4-en/mysql-shell-autocompletion.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API