L'onglet SQL exécute vos propres requêtes sur les données de jeu d'une version de jeu, pour les questions auxquelles les autres onglets ne répondent pas : une jointure entre tables, un décompte, un tri. Les requêtes s'écrivent dans le dialecte SQL de SQLite. Les données de jeu sont ouvertes en lecture seule : rien de ce que vous exécutez ne peut les modifier ni les casser.
L'ouvrir
Sur la page du jeu de la version, ouvrez Données de jeu, puis SQL. L'éditeur contient déjà la première requête d'exemple, prête à être exécutée.
Exécuter une requête
- Tapez une requête dans l'éditeur, ou modifiez celle qui s'y trouve.
- Cliquez sur Exécuter, ou appuyez sur Ctrl+Entrée (Cmd+Entrée sur Mac).
L'éditeur colore le SQL et propose des complétions pendant la saisie :
- les colonnes des tables que votre requête nomme déjà ;
- tous les noms de tables ;
- les mots-clés et les fonctions SQL courants ;
- entre apostrophes, les noms des enregistrements dans la Langue choisie dans l'en-tête de la page du jeu : taper
'BoufproposeBouftou.
Lire les résultats
À côté des boutons, l'onglet affiche le nombre de lignes, arrêtée à la limite quand la requête avait plus de lignes que l'onglet n'en affiche, et la durée de la requête, en millisecondes.
Le tableau de résultats a une colonne par colonne sélectionnée, dans l'ordre de la requête, et deux colonnes peuvent porter le même nom. Les valeurs imbriquées s'affichent en JSON. Les valeurs longues sont coupées : pointez une cellule pour la lire en entier. Une requête qui ne trouve rien affiche « La requête n'a renvoyé aucune ligne. »
L'onglet affiche jusqu'à 500 lignes. Pour voir les lignes suivantes, restreignez la requête avec WHERE, ou parcourez-la par pages avec LIMIT et OFFSET.
Exemples
Exemples ouvre un menu de requêtes d'exemple regroupées par thème. En choisir une remplace le contenu de l'éditeur, et les notes sur ce thème apparaissent sous l'éditeur : quelles tables contiennent quoi, et les pièges à éviter.
| Thème | Ce que couvrent ses requêtes |
|---|---|
| explore | Ce que contiennent les données de jeu : toutes les tables, leur taille, et lesquelles sont dérivées |
| names | Trouver des enregistrements par nom grâce à la table _names |
| monsters | Les monstres, leur force, et où ils vivent |
| items | Les objets, ce qu'ils font, et d'où ils viennent |
| harvesting | Ce qui pousse où, et quelle compétence permet de le récolter |
| navigation | Les coordonnées, les zaaps et le graphe de déplacement du monde |
| crafting | Les recettes, les ingrédients et les métiers qui les fabriquent |
| maps | Les cellules, les cellules praticables et ce qui se trouve sur les cartes |
| quests | Les quêtes, leurs étapes, et les donjons |
| text | Tous les textes que le jeu peut afficher, en cinq langues |
Plusieurs exemples cherchent des noms français, avec des conditions telles que n.language = 'fr'. Remplacez fr par en, de, es ou pt pour une autre langue.
Écrire vos propres requêtes
_catalogliste toutes les tables, avec leur nombre de lignes et le fait qu'elles soient dérivées ou non :SELECT name, row_count, derived FROM _catalog ORDER BY row_count DESC;Les noms passent par
_names, avec les colonnesrecord_table,record_id,name_id,name,languageetordinal. Un enregistrement peut avoir plusieurs noms, et l'ordinal0est son nom principal.Les textes d'une langue sont dans la table
text_suivie du code de langue, par exempletext_fr, avec une colonneidet une colonnetext.Dans une table dérivée, dont le nom contient deux tirets bas, chaque ligne pointe vers sa ligne parente avec
_parent_id.Mettez le texte entre apostrophes, comme dans
'monsters'. Les guillemets doubles servent seulement à nommer une table ou une colonne.Pour chercher dans les noms ou les textes, les index plein texte
_names_ftsettext_fr_fts(un par langue) sont bien plus rapides queLIKE '%...%'. Les exemples names et text montrent comment les utiliser.
L'onglet Tables de Données de jeu montre les colonnes de chaque table et leurs types, ce qui aide pendant l'écriture.
Lecture seule et limites
INSERT, UPDATE, DELETE, CREATE et toute autre instruction qui écrit échouent, et ATTACH est aussi refusé : une requête ne peut donc atteindre aucun autre fichier de base de données.
Quand l'éditeur contient plusieurs instructions séparées par des points-virgules, elles s'exécutent toutes, et l'onglet affiche le résultat de la dernière.
| Limite | Valeur | Au-delà |
|---|---|---|
| Lignes affichées | 500 | Les autres lignes sont laissées de côté, et arrêtée à la limite apparaît. |
| Durée | 10 secondes par requête | La requête est interrompue et échoue. |
| Longueur de la requête | 64 Kio | La requête échoue avec un texte tel que datacenter: query is 70000 bytes, over the 65536 byte limit. |
| Taille d'une valeur construite par la requête | 16 Mio | La requête échoue. |
| Requêtes simultanées | 4 sur une même version de jeu, partagées entre tous les onglets SQL ouverts et les scripts de tous les bots | Les autres requêtes attendent leur tour. |
Quand une requête échoue
Une alerte rouge affiche la raison telle que SQLite la donne : un texte commençant par datacenter: qui nomme le problème, par exemple no such column: nmae pour un nom de colonne mal tapé. Quand Asterobot n'a donné aucune raison, l'alerte indique La requête a échoué. Corrigez la requête et exécutez-la de nouveau.
Utiliser une requête dans un script
Un script exécute le même type de requête avec query() de asterobot:gamedata, sur les données de jeu de la version de jeu de son bot. L'onglet SQL est l'endroit le plus rapide pour mettre au point une requête avant de la placer dans un script : Requêtes SQL explique le reste, y compris les paramètres.