{"id":13792569,"url":"https://github.com/ocelot-inc/ocelotgui-tarantool","last_synced_at":"2025-05-12T14:31:58.190Z","repository":{"id":73548863,"uuid":"316039467","full_name":"ocelot-inc/ocelotgui-tarantool","owner":"ocelot-inc","description":"A GUI for Tarantool.","archived":false,"fork":false,"pushed_at":"2024-06-12T22:55:22.000Z","size":1952,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-18T06:49:28.009Z","etag":null,"topics":["gui","sql","tarantool"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ocelot-inc.png","metadata":{"files":{"readme":"README.htm","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-25T19:49:36.000Z","updated_at":"2024-07-29T06:42:00.000Z","dependencies_parsed_at":"2023-02-25T10:16:10.749Z","dependency_job_id":"2c0cf0c7-c820-4def-89e1-3616d32124fa","html_url":"https://github.com/ocelot-inc/ocelotgui-tarantool","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocelot-inc%2Focelotgui-tarantool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocelot-inc%2Focelotgui-tarantool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocelot-inc%2Focelotgui-tarantool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ocelot-inc%2Focelotgui-tarantool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ocelot-inc","download_url":"https://codeload.github.com/ocelot-inc/ocelotgui-tarantool/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253754967,"owners_count":21958934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","sql","tarantool"],"created_at":"2024-08-03T22:01:13.831Z","updated_at":"2025-05-12T14:31:57.552Z","avatar_url":"https://github.com/ocelot-inc.png","language":null,"funding_links":[],"categories":["Packages"],"sub_categories":["GUI clients"],"readme":"\nocelotgui A GUI for Tarantool\n\n\u003cP\u003eVersion 2.4.0\u003c/P\u003e\n\n\u003cP\u003eThe ocelotgui GUI, a database client, allows users to connect to\na Tarantool (tm) server, enter SQL statements, and receive results.\nSome of its features are: syntax highlighting, user-settable colors\nand fonts for each part of the screen, result-set displays\nwith multi-line rows and resizable columns.\u003c/P\u003e\n\n\u003cP\u003eCopyright (c) 2024 by Peter Gulutzan\nAll rights reserved.\u003c/P\u003e\n\n\u003cP\u003eFor the GPL license terms see \u003cA href=\"https://github.com/ocelot-inc/ocelotgui/blob/master/LICENSE.GPL\"\u003ehttps://github.com/ocelot-inc/ocelotgui/blob/master/LICENSE.GPL\u003c/A\u003e.\u003c/P\u003e\n\n\u003cP\u003eThis README file has installation instructions, screenshots, and a user manual which has been stripped so it only shows what is relevant for Tarantool.\u003c/P\u003e\n\n\u003cH3\u003eContents\u003c/H3\u003e\u003cHR\u003e\n\n\u003cH4\u003eInstalling\u003c/H4\u003e\n... \u003cA href=\"#prerequisites\"\u003ePrerequisites\u003c/A\u003e\n... \u003cA href=\"#getting-the-qt-library\"\u003eGetting the Qt library\u003c/A\u003e\n... \u003cA href=\"#getting-the-libmysqlclientso-library\"\u003eGetting the libmysqlclient.so library\u003c/A\u003e\n... \u003cA href=\"#getting-the-ocelotgui-executable-package\"\u003eGetting the ocelotgui executable package\u003c/A\u003e\n... \u003cA href=\"#starting-the-program\"\u003eStarting the program\u003c/A\u003e\n\u003cH4\u003eIllustrating\u003c/H4\u003e\n... \u003cA href=\"#some-screenshots\"\u003eSome screenshots\u003c/A\u003e\n\u003cH4\u003eUsing\u003c/H4\u003e\n... \u003cA href=\"#user-manual\"\u003eUser Manual\u003c/A\u003e\n... \u003cA href=\"#executive-summary\"\u003eExecutive Summary\u003c/A\u003e\n... \u003cA href=\"#the-developer-the-product-and-the-status\"\u003eThe developer, the product, and the status\u003c/A\u003e\n... \u003cA href=\"#downloading-installing-and-building\"\u003eDownloading, installing, and building\u003c/A\u003e\n... \u003cA href=\"#starting\"\u003eStarting\u003c/A\u003e\n... \u003cA href=\"#statement-widget\"\u003eStatement widget\u003c/A\u003e\n... \u003cA href=\"#client-statements\"\u003eClient statements\u003c/A\u003e\n... \u003cA href=\"#history-widget\"\u003eHistory widget\u003c/A\u003e\n... \u003cA href=\"#result-widget\"\u003eResult widget\u003c/A\u003e\n... \u003cA href=\"#menu\"\u003eMenu\u003c/A\u003e\n... \u003cA href=\"#special-effects\"\u003eSpecial effects\u003c/A\u003e\n... \u003cA href=\"#explorer-widget\"\u003eExplorer widget\u003c/A\u003e\n... \u003cA href=\"#ERDiagram\"\u003eERDiagram\u003c/A\u003e\n... \u003cA href=\"#charts\"\u003eCharts\u003c/A\u003e\n... \u003cA href=\"#make-menus\"\u003eMake your own menus\u003c/A\u003e\n... \u003cA href=\"#plugins\"\u003eMake your own plugins/A\u003e\n... \u003cA href=\"#contact\"\u003eContact\u003c/A\u003e\n\u003cH4\u003eAppendixes\u003c/H4\u003e\n... \u003cA href=\"#Appendix-1\"\u003eAppendix 1 Details about ocelotgui options\u003c/A\u003e\n... \u003cA href=\"#Appendix-2\"\u003eAppendix 2 Debugger\u003cA\u003e\n... \u003cA href=\"#Appendix-3\"\u003eAppendix 3 Tarantool Extras\u003c/A\u003e\n... \u003cA href=\"#Appendix-4\"\u003eAppendix 4 windows\u003c/A\u003e\n... \u003cA href=\"#getting-and-using-the-ocelotgui-source\"\u003eAppendix 5 Getting and using the ocelotgui source\u003c/A\u003e\n\n\u003cH3 id=\"prerequisites\"\u003ePrerequisites\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThe installation instructions in this section are for Linux.\nIf you prefer to run on Windows, read the installation instructions\nin \u003cA href=\"#Appendix-4\"\u003eAppendix 4 windows\u003c/A\u003e\nand come back to read the User Manual section.\n\nThe basic prerequisites for installation are Linux, and the Qt library.\n\u003c/P\u003e\n\n\u003cH3 id=\"getting-the-qt-library\"\u003eGetting the Qt library\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eYou probably will find that the Qt package is already installed,\nsince other common packages depend on it. If not, your Linux\ndistro's repositories will provide a Qt package.\nFor example, on some platforms you can say\n\"sudo apt-get install libqt5core5a libqt5widgets5\" , on others you can say \"dnf install qt qt-x11\",\non others you can say \"dnf install qt5-qtbase qt5-qtbase-gui\".\u003c/P\u003e\n\n\u003cP\u003e\nThe Qt version number can be found with \u003ci\u003efind /usr/lib -name \"libQt*Gui.so*\"\u003c/i\u003e, or \u003ci\u003efind /usr/lib64 -name \"libQt*Gui.so*\"\u003c/i\u003e.\nIf the response starts with libQtGui.so.4 then you have Qt4,\nif the response starts with libQt5Gui.so.5 then you have Qt5.\nAlternatively it sometimes can be found with qmake -v.\nPeter Gulutzan supplies executables only for Qt version 5, but if you have Qt version 4 or Qt version 6 you can build from source.\n\u003c/P\u003e\n\n\u003cP\u003eThe Qt library is necessary for ocelotgui installation.\u003c/P\u003e\n\n\u003cH3 id=\"getting-the-ocelotgui-executable-package\"\u003eGetting the ocelotgui executable package\u003c/H3\u003e\u003cHR\u003e\n\nThere are ocelotgui binary packages for platforms such as Ubuntu/Mint/MX where \"Debian-like\" packages\nare preferred, or platforms such as Mageia/SUSE/Fedora (but not CentOS 7) where \"RPM-like\" packages\nare preferred.\nIf one of the following ocelotgui binary packages is compatible with your platform,\ncut and paste the corresponding pair of instructions onto your computer and\nyou can be up and running in about 15 seconds.\u003cBR\u003e\u003cBR\u003e\nFor 32-bit, Debian-like, Qt5\u003cPRE\u003e\nwget https://github.com/ocelot-inc/ocelotgui/releases/download/2.4.0/ocelotgui_2.4.0-1_i386.deb\nsudo apt install ./ocelotgui_2.4.0-1_i386.deb\u003c/PRE\u003e\nFor 64-bit, Debian-like, Qt5\u003cPRE\u003e\nwget https://github.com/ocelot-inc/ocelotgui/releases/download/2.4.0/ocelotgui_2.4.0-1_amd64.deb\nsudo apt install ./ocelotgui_2.4.0-1_amd64.deb\u003c/PRE\u003e\nFor 64-bit, RPM-like, Qt5\u003cPRE\u003e\nwget https://github.com/ocelot-inc/ocelotgui/releases/download/2.4.0/ocelotgui-2.4.0-1.x86_64.rpm\nsudo rpm -i ocelotgui-2.4.0-1.x86_64.rpm\u003c/PRE\u003e\nFor 64-bit, any Linux, Qt5\u003cPRE\u003e\nwget https://github.com/ocelot-inc/ocelotgui/releases/download/2.4.0/ocelotgui-2.4.0.tar.gz\ntar zxvf ocelotgui-2.4.0.tar.gz\nocelotgui/ocelotgui-qt5\u003c/PRE\u003e\nFor 64-bit, any Linux, Qt4 (deprecated)\u003cPRE\u003e\nwget https://github.com/ocelot-inc/ocelotgui/releases/download/2.4.0/ocelotgui-2.4.0.tar.gz\ntar zxvf ocelotgui-2.4.0.tar.gz\nocelotgui/ocelotgui-qt4\u003c/PRE\u003e\n\u003c/P\u003e\n\n\u003cH3 id=\"starting-the-program\"\u003eStarting the program\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eAfter installing and making sure that ocelotgui is on the\npath, start it with\u003cPRE\u003e\nocelotgui --ocelot_dbms=tarantool\u003c/PRE\u003e\nalong with some of many options for example\u003cPRE\u003e\nocelotgui --ocelot_dbms=tarantool --host=localhost --port=3302 --user=guest\u003c/PRE\u003e\nor\u003cPRE\u003e\nocelotgui --ocelot_dbms=tarantool --host=127.0.0.1 --port=3301 --user=joe --password=secret\u003c/PRE\u003e\n-- if the program starts, and menu items such as Help|Manual\nwork, then installation is successful.\nStop again with File|Exit or control-Q.\n\u003c/P\u003e\n\n\u003cP\u003eWarning: Some menu shortcut keys may not work properly with Ubuntu 14.04.\u003c/P\u003e\n\n\u003cH2 ID=\"some-screenshots\"\u003eSome screenshots\u003c/H2\u003e\u003cHR\u003e\n\n\u003cA href=\"shot1.jpg\"\u003e\u003cimg src=\"shot1.jpg\" alt=\"shot1.jpg\" align=\"left\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot2.jpg\"\u003e\u003cimg src=\"shot2.jpg\" alt=\"shot2.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot3.png\"\u003e\u003cimg src=\"shot3.png\" alt=\"shot3.png\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot4.jpg\"\u003e\u003cimg src=\"shot4.jpg\" alt=\"shot4.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot5.jpg\"\u003e\u003cimg src=\"shot5.jpg\" alt=\"shot5.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot6.jpg\"\u003e\u003cimg src=\"shot6.jpg\" alt=\"shot6.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot7.jpg\"\u003e\u003cimg src=\"shot7.jpg\" alt=\"shot7.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot8.jpg\"\u003e\u003cimg src=\"shot8.jpg\" alt=\"shot8.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot9.jpg\"\u003e\u003cimg src=\"shot9.jpg\" alt=\"shot9.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot10.jpg\"\u003e\u003cimg src=\"shot10.jpg\" alt=\"shot10.jpg\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"shot11.png\"\u003e\u003cimg src=\"shot11.png\" alt=\"shot11.png\" height=\"150\"\u003e\u003c/A\u003e\n\u003cA href=\"explorer1.png\"\u003e\u003cimg src=\"explorer1.png\" alt=\"explorer1.png\" height=\"150\"\u003e\u003c/A\u003e\n\n\u003cH2 ID=\"user-manual\"\u003eUser Manual\u003c/H2\u003e\u003cHR\u003e\u003cHR\u003e\n\n\u003cP\u003eVersion 2.4.0, February 15 2024\u003c/P\u003e\n\n\u003cP\u003eCopyright (c) 2024 by Peter Gulutzan. All rights reserved.\u003c/P\u003e\n  \n\u003cP\u003eThis program is free software; you can redistribute it and/or modify  \nit under the terms of the GNU General Public License as published by  \nthe Free Software Foundation; version 2 of the License.\u003c/P\u003e\n  \n\u003cP\u003eThis program is distributed in the hope that it will be useful,  \nbut WITHOUT ANY WARRANTY; without even the implied warranty of  \nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  \nGNU General Public License for more details.\u003c/P\u003e\n  \n\u003cP\u003eYou should have received a copy of the GNU General Public License  \nalong with this program; if not, write to the Free Software  \nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA\u003c/P\u003e\n\n\u003cH3 id=\"executive-summary\"\u003eExecutive Summary\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThe ocelotgui application, formerly called\n'The Ocelot Graphical User Interface', allows users to connect to\na Tarantool DBMS server, enter SQL statements, and receive results.\nSome of its features are: syntax highlighting, user-settable colors\nand fonts for each part of the screen, and result-set displays\nwith multi-line rows and resizable columns.\u003c/P\u003e\n\n\u003cH3 id=\"the-developer-the-product-and-the-status\"\u003eThe developer, the product, and the status\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003ePeter Gulutzan is a Canadian\nwho has specialized in database products for thirty years,\nas an employee of Ocelot Computer Services Inc. and\nMySQL AB and Sun Microsystems and Oracle and HP, or as a\ncontractor for a large company in eastern Europe.\u003c/P\u003e\n\n\u003cP\u003eThe ocelotgui program is a front end which connects to Tarantool (tm).\nIn some ways it is like the mysql client program that connects to MySQL or MariaDB servers,\nwith added GUI features: full-screen editing, syntax\nhighlighting, tabular display, customized fonts and colors.\nIt differs from some other front-end GUI products because\nit is open source (GPL), it is written in C++, and it makes use\nof the Qt multi-platform widget library.\u003c/P\u003e\n  \n\u003cP\u003eThe product status is: stable. It has been known to work as described in\nthis manual on several Linux distros. It is stable, in the sense that\nthere are no known severe errors and the features are frozen until the\nnext version.\nPeter Gulutzan will address any bug reports and will answer any questions.\u003c/P\u003e\n\n\u003cH3 id=\"downloading-installing-and-building\"\u003eDownloading, installing, and building\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eTo download the product go to\n\u003cA HREF=\"https://github.com/ocelot-inc/ocelotgui\"\u003ehttps://github.com/ocelot-inc/ocelotgui\u003c/A\u003e.\nInstructions for installation will be in the README.md file.\nThis location may change, or alternate locations may appear.\nIf so there will either be an announcement on github or on ocelot.ca.\u003c/P\u003e\n\n\u003cP\u003eThe package contains source code and an executable file named ocelotgui-qt5.\u003c/P\u003e\n\n\u003cH3 id=\"starting\"\u003eStarting\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003e\nThere must be an instance of Tarantool running somewhere.  \n\u003c/P\u003e\n\u003cP\u003e\nIf connection is possible with the tarantoolctl client and does not require\nunusual options, then connection is possible with ocelotgui. Options can\nbe supplied in a special file (usually called ~/.my.cnf) or on a command line.\nTherefore the typical\nway to start the program is to say  \nocelotgui [--option [--option...]]  \n\u003cbr\u003e\nFor a description of options see  \u003cA href=\"#Appendix-1\"\u003eAppendix 1 Details about ocelotgui options\u003c/A\u003e.\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"starting-dialog.png\"\u003e\u003cimg src=\"starting-dialog.png\" alt=\"starting-dialog.png\" align=\"right\" height=\"128\"\u003e\u003c/A\u003e\nIf a password is required but not supplied, a dialog box will appear.\nOr, if the initial attempt to connect fails, an error message will appear\nsaying it is necessary to choose File|Connect, which will cause the dialog\nbox to appear. The dialog box has many possible settings\n(see the list in \u003cA href=\"#Appendix-1\"\u003eAppendix 1\u003c/A\u003e);\nhowever, for getting started, the ones that matter most are the ones\nat the top: host, port, user, password.  \nIf the connection still fails, then ocelotgui will still come up,\nbut only non-DBMS tasks such as screen customizing will be possible.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"starting.png\"\u003e\u003cimg src=\"starting.png\" alt=\"starting.png\" align=\"right\" height=\"256\"\u003e\u003c/A\u003e\nIn any case, an initial screen will appear. After some activity has\ntaken place, the screen will have four parts, from top to bottom:\u003cBR\u003e\nmenu \u003cBR\u003e\nhistory widget, where retired statements and diagnostics end up \u003cBR\u003e\nresults widget, where SELECT result sets appear \u003cBR\u003e\nstatement widget, where users can type in instructions.\u003cBR\u003e\n(And optionally, on the side, an explorer widget.)\nInitially, though, only the menu and statement widget will appear.\n\u003c/P\u003e\n\u003cP\u003e\nAgain, this should be reminiscent of the way a non-GUI client works:\nstatements are typed at the bottom of the screen, and appear to\nscroll off the top after they are executed, with results in the middle.  \n\u003c/P\u003e\n \n\u003cH3 id=\"statement-widget\"\u003eStatement widget\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThe statement widget is an editable multi-line text box.\nThe usual control keys that work on other text editors will work\nhere too; see the later description of Menu Item: Edit.\u003c/P\u003e\n  \n\u003cP\u003eThe program includes a syntax checker and can recognize the parts of\nspeech in Tarantool grammar.\nIt will do syntax highlighting\nby changing the color, for example comments will appear in light green,\nidentifiers in green, operators in dark gray, and so on.  \nThe colors can be\ncustomized, see the later description of Menu Item: Settings.\u003c/P\u003e\n\u003cP\u003e\nThe left side of the statement widget is reserved for the prompt,\nand cannot be typed over. Initially the prompt will be 'tarantool\u0026gt;'\nbut this can be changed, see the later description of\nClient Statements: Prompt.  \n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"statement-widget-example.png\"\u003e\u003cimg src=\"statement-widget-example-tarantool.png\" alt=\"statement-widget-example-tarantool.png\" align=\"right\" height=\"82\"\u003e\u003c/A\u003e\nFor example, this screenshot shows the statement widget\nafter the user has changed the default prompt and\nentered an SQL statement.\nThe statement has keywords in magenta, literals in dark green,\noperators in light green, and comments in red.\nThe prompt on the left has a gray background.\n\u003cBR clear=\"all\"\u003e \n\u003c/P\u003e\n\n\u003cP\u003eMajor Feature Alert: this is not merely a GUI that only will\nhighlight words that are in a list of keywords.\nThis GUI will parse the complete Tarantool grammar,\nwithout needing to ask the server. So the highlighting\nwill be correct, syntax errors will be underlined in red,\nand -- since the parsing method is predictive -- there will be\ncontinuous hints about what word is expected next, and\noptionally an error message explaining suspected syntax problems\nbefore they go to the server.\u003c/P\u003e\n\n\u003cP\u003eOnce a statement has been entered and is ready to be executed,\nthe user can hit control-E, choose menu item Run|Execute, or\nplace the cursor at the end of the text (after the ';' or other\ndelimiter) and type Enter. It is legal to enter multiple\nstatements, separated by semicolons, and then execute them\nin a single sequence.\u003c/P\u003e\n\n\u003cH3 id=\"client-statements\"\u003eClient statements\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eA client statement is a statement which changes some behavior\nof the client (that is, of the ocelotgui front end) but does not\nnecessarily go to the Tarantool server. Try out a few: \u003cbr\u003e\nSET OCELOT_STATEMENT_HIGHLIGHT_KEYWORD_COLOR = 'Fuchsia'; \u003cbr\u003e\nPROMPT Tarantool \\v; \u003cbr\u003e\nSTATUS; \u003cbr\u003e\nOther interesting ones are DELIMITER (similar to the Tarantool\nconsole's delimiter), SOURCE to read statements from a file,\nand EXIT or QUIT.\nFor example, entering 'quit;'\nfollowed by Enter will cause the program to stop. It is\nsometimes not mandatory to end a client statement with ';',\nbut is strongly recommended.\u003c/P\u003e\n\n\u003cP\u003eThere are some enhancements affecting the PROMPT statement.\nThe special sequence '\u0026#92;2' means 'repeat the prompt on all lines',\nand the special sequence '\u0026#92;L' means 'show line numbers'. For example,\n'PROMPT \u0026#92;2\u0026#92;Tarantool;' will change the prompt so that each line begins\nwith '[line number] Tarantool\u003e'.\u003c/P\u003e\n\n\u003cH3 id=\"history-widget\"\u003eHistory widget\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eOnce a statement has been executed, a copy of the statement text\nand the diagnostic result (for example: 0.04 seconds, OK) will\nbe placed in the history widget. Everything in the history widget\nis editable including the prompt, and it simply fills up so that\nafter a while the older statements are scrolled off the screen.  \nThus its main function is to show what recent statements and\nresults were. Statements in the history can be retrieved while\nthe focus is on the statement widget, by selecting 'Previous statement'\nor 'Next statement' menu items.\u003c/P\u003e\n\u003cP\u003eInitially the history widget will show some statements from past\nsessions which are stored in a history file.\u003c/P\u003e\n\n\u003cH3 id=\"result-widget\"\u003eResult widget\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003e\nIf a statement is SELECT or PRAGMA or some other statement that\nreturns a result set, it will appear in the result widget in\nthe middle area of the screen. The result widget is split up\ninto columns. Each column has a header and details taken from\nwhat the DBMS returns.  \n\u003c/P\u003e\n\u003cP\u003e\nThe width of the column depends on the result set's definition,\nbut extremely wide columns will be split onto multiple lines.\nThat is, one result-set row may take up to five lines.  \nIf the data still is too wide or too tall to fit in the cell,\nthen the cell will get a vertical scroll bar. The user can\nchange the width of a column by dragging the column's right\nborder to the right to make the column wider, or to the left\nto make it narrower.  \n\u003c/P\u003e\n\u003cP\u003e\nThe result widget as a whole may have a horizontal and a vertical\nscroll bar. The vertical scroll bar moves a row at a time rather\nthan a pixel at a time -- this makes large result sets more\nmanageable, but makes the vertical scroll bar unresponsive if\neach row has multiple lines and the number of rows is small.  \n\u003c/P\u003e\n\u003cP\u003e\nFor example, this screenshot shows the whole screen after the\nuser has typed the statement \u003ci\u003eSELECT * FROM \"_vindex\";\u003c/i\u003e\non the statement widget and then executed it. The statement text\nhas been copied to the history widget, the statement widget has\nbeen cleared, the result widget has the rows. \n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"result-widget-example-tarantool.png\"\u003e\u003cimg src=\"result-widget-example-tarantool.png\" alt=\"result-widget-example-tarantool.png\" height=\"460\"\u003e\u003c/A\u003e\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\nBy the way, notice that ocelotgui has \"flattened\" some maps and arrays in \"_vindex\".\nFlattening is a necessary enhancement for a Tarantool client because otherwise\nthe result set would not be tabular when selecting from a Lua space.\n\u003c/P\u003e\n\u003cBR\u003e\u003cBR\u003e\n\n\u003cH3 id=\"menu\"\u003eMenu\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThe menu at the top of the screen has File, Edit, Run, Settings,\nOptions, Debug and Help.\u003c/P\u003e\n\n\u003cP\u003e\n\u003cA href=\"menu-file.png\"\u003e\u003cimg src=\"menu-file.png\" alt=\"menu-file.png\" align=\"right\" height=\"48\"\u003e\u003c/A\u003e\nFile|Connect, or Ctrl+O, starts the Connect dialog box.  \nFile|Exit, or Ctrl+Q, stops the program.\nFile|Export brings up a dialog box for exporting selections.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"menu-edit-tarantool.png\"\u003e\u003cimg src=\"menu-edit-tarantool.png\" alt=\"menu-edit-tarantool.png\" align=\"right\" height=\"192\"\u003e\u003c/A\u003e\nEdit|Undo or Ctrl+Z, Edit|Redo or Ctrl+Shift+Z, Edit|Cut or Ctrl+X,\nEdit|Cut or Ctrl+X, Edit|Copy or Ctrl+C, Edit|Paste or Ctrl+V,\nand Edit|Select or Ctrl+A, all work in the conventional manner.\nEdit|Redo can only redo the last change.  \nPrevious Statement or Ctrl+P and Next Statement or Ctrl+N will\ncopy earlier statements from the history widget into the statement\nwidget, so that they can be edited or re-executed with Run|Execute\nor Ctrl+E. Format or Alt+Shift+F changes what is in the statement\nwidget according to a simple style guide. Autocomplete or Tab will\nbe discussed later.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"menu-run.png\"\u003e\u003cimg src=\"menu-run.png\" alt=\"menu-run.png\" align=\"right\" height=\"48\"\u003e\u003c/A\u003e\nRun|Execute or Ctrl+E or Ctrl+Enter causes execution of whatever is in the\nstatement widget.  \nRun|Kill or Ctrl+C tries to stop execution -- this\nmenu item is disabled for Tarantool.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"menu-settings.png\"\u003e\u003cimg src=\"menu-settings.png\" alt=\"menu-settings.png\" align=\"right\" height=\"120\"\u003e\u003c/A\u003e\nSettings|Menu, Settings|History Widget, Settings|Grid Widget,\nSettings|Statement, and Settings|Extra Rule 1 are\nitems which affect the behavior of each\nindividual widget. The color settings affect foregrounds,\nbackgrounds, borders, and (for the statement widget only)\nthe syntax highlights. The font settings affect font family,\nboldness, italics, and size.\nThere may be additional choices affecting appearance,\nfor example the width of the border used to drag columns\nin the result widget.\nSettings|Extra Rule 1 is conditional -- for example, to specify\nthat varbinaries should be displayed as images on a pink background,\nset Grid Background Color Pink, set Condition = data_type LIKE\n'%BINARY', set Display As = image, then click OK.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"menu-options.png\"\u003e\u003cimg src=\"menu-options.png\" alt=\"menu-options.png\" align=\"right\" height=\"72\"\u003e\u003c/A\u003e\nOptions|detach history widget,\nOptions|detach result grid widget,\nOptions|detach debug widget are\nfor turning the respective widgets into independent windows,\nso that they can be moved away from the statement widget,\nor resized. A detached widget is always kept on top of the\nother widgets in the application screen. When a widget is\nalready detached, the menu item text will change to \"attached\"\nand clicking it will put the widget back in its original position.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"menu-debug.png\"\u003e\u003cimg src=\"menu-debug.png\" alt=\"menu-debug.png\" align=\"right\" height=\"132\"\u003e\u003c/A\u003e\nThe items on the Debug menu are disabled for Tarantool.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n  \n\u003cP\u003e\n\u003cA href=\"menu-help.png\"\u003e\u003cimg src=\"menu-help.png\" alt=\"menu-help.png\" align=\"right\" height=\"96\"\u003e\u003c/A\u003e\nHelp|About will show the license and copyright and version.\nHelp|The Manual will show the contents of README.md (not the manual that you are reading) if README.md is on the same path as\nthe ocelotgui program; otherwise it will show a copyright, a GPL license, and a pointer to README.md.\nHelp|libmysqlclient is not relevant for Tarantool.\nHelp|settings will advise about how to use the Settings menu items.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\n\n\u003cH3 id=\"special-effects\"\u003eSpecial Effects\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003e\n\u003cA href=\"special-vertical-tarantool.png\"\u003e\u003cimg src=\"special-vertical-tarantool.png\" alt=\"special-vertical-tarantool.png\" align=\"right\" height=\"256\"\u003e\u003c/A\u003e\n\u003e Vertical: If a user starts ocelotgui with the additional option --vertical=1,\n\u003e results come up with one column per row.\n\u003e (There are other options for displaying as html, raw, etc.).\n\u003cBR clear=\"all\"\u003e \n\u003c/P\u003e\n  \n\u003cP\u003e\n\u003cA href=\"special-images.png\"\u003e\u003cimg src=\"special-images.png\" alt=\"special-images.png\" align=\"right\" height=\"256\"\u003e\u003c/A\u003e\nImages: If a user chooses Settings | Extra Rule 1 from the menu,\nand sets the Condition and Display As boxes as described earlier,\nand selects rows which contain VARBINARY columns, and the column values are\nimages (such as PNG or JPEG or BMP or GIF format data), ocelotgui will display\nthe result as images.  \n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP\u003e\nResult-set editing: If a user clicks on a column in the result set\nand makes a change, an update statement will appear in the statement widget.\nFor example, if a result set is the result from SELECT column1, column2 FROM t;,\nand the column1 value is 5, and the column2 value is 'ABC', and the user changes\nthe column2 value to 'AB', then the\nstatement widget will show UPDATE t SET column2 = 'AB' WHERE column1 = 5 AND column2 = 'AB';.\nThe user then has the choice of ignoring the update statement or executing it.  \n\u003c/P\u003e\n\u003cP\u003e\n\u003cA href=\"special-detach.png\"\u003e\u003cimg src=\"special-detach.png\" alt=\"special-detach.png\" align=\"right\" height=\"256\"\u003e\u003c/A\u003e\nDetaching: If a user chooses Options | detach history widget or\nOptions | detach result grid widget, then the widget will become a separate window\nwhich can be moved or resized.  \n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\u003cP id=\"special-settings\"\u003e\n\u003cA href=\"special-settings.png\"\u003e\u003cimg src=\"special-settings.png\" alt=\"special-settings.png\" align=\"right\" height=\"512\"\u003e\u003c/A\u003e\nColors: The Colors and fonts dialog boxes have a simple way to choose\ncolors, by selecting from a choice of 148 color names / color icons. Users can also\nchange colors by saying SET object_name_color = color-name | hex-rgb-value.  \nIn fact ocelotgui mixes the modes: for example if a user chooses Settings | Grid Text Color,\nthen clicks on the 'Red' icon, then clicks OK, ocelotgui generates a\nstatement \"SET ocelot_grid_text_color = 'Red';\". This makes the instruction\neasy to repeat or put in a script.\n\u003cBR clear=\"all\"\u003e\n\u003c/P\u003e\n\n\u003cP\u003eRE: AUTOCOMPLETION. While a user is entering an SQL statement,\nocelotgui will display a list of possible words that may follow.\nHitting the Tab key will cause the first word in the list to be\ndisplayed and accepted.\nUsers can use arrow keys to select other words,\nand can use \"set ocelot_shortcut_autocomplete='...'; to choose a different key instead of the Tab key,\nand can use \"set ocelot_completer_timeout=...'; to choose how many seconds the list will be visible,\nand can use \"rehash;\" to update the list.\u003cbr\u003e\n\u003cA href=\"completer_1-tarantool.png\"\u003e\u003cimg src=\"completer_1-tarantool.png\" alt=\"completer_1-tarantool.png\" height=\"128\" width=\"256\"\u003e\u003c/A\u003e\u003cbr\u003e\n\u003cA href=\"completer_2-tarantool.png\"\u003e\u003cimg src=\"completer_2-tarantool.png\" alt=\"completer_2-tarantool.png\" height=\"128\" width=\"256\"\u003e\u003c/A\u003e\u003cbr\u003e\n\u003cA href=\"completer_3-tarantool.png\"\u003e\u003cimg src=\"completer_3-tarantool.png\" alt=\"completer_3-tarantool.png\" height=\"128\" width=\"256\"\u003e\u003c/A\u003e\n\u003c/P\u003e\n\n\u003cP\u003eRE: HINTING FOR COLUMN NAMES. Although hints for syntax appear by\ndefault, hints for table / column identifiers might not. In order to\nmake identifiers appear on the hint list: (1) ensure the setting\nfor auto_rehash has not been turned off, and/or (2) enter the statement\n\"REHASH;\" to make the client ask the server for a list of identifiers\nin the current database; (3) when entering an SQL statement, type `\n(backtick) at the point where an identifier is expected.\u003c/P\u003e\n\n\u003cP\u003eRE: FONT. By default, ocelotgui uses a fixed-pitch (mono) font that\nhas similar attributes to whatever font was in use\nat the time it started. This may be a bad choice.\nWe recommend trying out other fonts with the Settings menu\nfor each widget.\u003c/P\u003e\n\n\u003cP\u003eRE: PERMANENT CUSTOMIZING. Changes to settings can be done\nwith the Settings menu items, but such changes are not permanent.\nSo note the commands that ocelotgui performs when settings are\nchanged, and paste them into a file. Later this file can be\nexecuted (for example with SOURCE file-name), whenever ocelotgui\nis started again. Alternatively, settings can be placed in\nan options file such as my.cnf.\u003c/P\u003e\n\n\u003cP\u003e\n\u003cA href=\"special-settings.png\"\u003e\u003cimg src=\"conditional.png\" alt=\"special-settings.png\" align=\"right\" height=\"220\" width=\"404\"\u003e\u003c/A\u003e\nRE: CONDITIONAL SETTINGS. To override the ordinary \u003cA HREF=\"#special-settings\"\u003esettings\u003c/A\u003e\nfor result set displays there is a special SET statement with a WHERE clause:\u003cbr\u003e\nSET ocelot_grid_setting = string|integer [, ocelot_grid_value = string-or-integer...]\u003cbr\u003e\nWHERE condition [AND|OR condition ...];\u003cbr\u003e\nwhere ocelot_grid_setting is OCELOT_GRID_BACKGROUND_COLOR | OCELOT_GRID_FONT_STYLE |  etc.,\u003cbr\u003e\nand condition has the form item comparison-operator literal, where\nitem is COLUMN_NAME | COLUMN_NUMBER | COLUMN_TYPE | ROW_NUMBER | VALUE,\u003cbr\u003e\nand comparison-operator is = | \u003e | \u003e= | \u003c | \u003c= | \u003c\u003e | IS | REGEXP.\u003cbr\u003e\nFor example to say \"I want the background color to be pink if\nit's in the fourth column of the result set and it's NULL\", say\u003cbr\u003e\nSET ocelot_grid_background_color='pink' WHERE column_number = 4 AND value IS NULL;\".\u003c/P\u003e\n\n\u003cP\u003eRE: CONNECTION DIALOG. As stated earlier, if a password is necessary\nto connect, it is sufficient to start ocelotgui with \"--password=\u003ci\u003epassword\u003c/i\u003e\"\nor by choosing File|Connect and typing a password in the Password\nfield (the sixth field in the Connection Dialog Box). Also on the\nConnection Dialog Box, if the server is running on the same computer\nas the ocelotgui client, it is sometimes a good idea to enter\n'127.0.0.1' in the host field, instead of 'localhost'.\u003c/P\u003e\n\n\u003cP\u003eRE: HOVERING. Use the mouse to hover over a word in the\nstatement widget, and ocelotgui will display what kind of word\nit is, for example \"table identifier\".\n\u003cA href=\"hover-tarantool.png\"\u003e\u003cimg src=\"hover-tarantool.png\" alt=\"hover-tarantool.png\" align=\"right\" height=\"128\" width=\"256\"\u003e\u003c/A\u003e\n\u003c/P\u003e\n\n\u003cP\u003eRE: FORMAT. Click Edit|Format, and ocelotgui will change the contents of\nthe statement widget so that keywords are upper case and\nsub-clauses or sub-statements are indented.\u003c/P\u003e\n\n\u003cP\u003eRE: HISTORY. By default the history does not contain any rows\nfrom result sets of previous statements. To change this, click\nSettings|History and enter a number for Max Row Count.\nAlso users can change the history file name with HISTFILE=name,\nchange what statements should not go to the ihstory file with HISTIGNORE=regexp,\nchange whether the history file will include system-generated comments with OCELOT_HISTFILEFLAGS='L'|'LP',\nchange how large the history file can become with OCELOT_HISTFILESIZE=number,\nchange how large the initial history can become with OCELOT_HISTSIZE=number.\n\u003c/P\u003e\n\n\u003cP\u003eRE: EXPORT. A result set can be dumped to a file as text, as table, or as html.\n\u003c/P\u003e\n\n\u003cP\u003eRE: TARANTOOL EXTRAS. There are a few other Tarantool-specific features\nthat have to be regarded as \"in development\" rather than \"everyday use\".\nFor example you can enter Lua statements as well as SQL statements.\nRead \u003cA HREF=\"#Appendix-3\"\u003eAppendix 3 Tarantool Extras\u003c/A\u003e.\u003cP\u003e\n\n\u003cH3 id=\"explorer-widget\"\u003eExplorer widget\u003c/A\u003e\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eEXPLORER NAME. Explorer.\nA similar feature in other GUI clients may be named \"object explorer\" or \"navigator\".\nCompare the name \"Windows explorer\".\nNote: this section has some MySQL/MariaDB output examples but the feature works with Tarantool too.\u003c/P\u003e\n\n\u003cP\u003eEXPLORER SETTINGS.\nTo change some significant settings, click on the menu bar: Settings|Explorer.\u003cbr\u003e\n\u003cimg src=\"explorer2.png\" alt=\"explorer2.png\" align=\"right\" height=\"256\"\u003e\nVisible: yes|no. Default no. So if you don't change this to 'yes', it is not visible.\nThere must be a connection to the DBMS server before it can be made visible.\u003cbr\u003e\nSort alphabetically: yes|no. Default no. If 'yes', objects of the same type are sorted alphabetically.\u003cbr\u003e\nQuery: a long select with unions.\nThe default query selects all databases.\nUsers can change this query to add WHERE clauses (affects MySQL/MariaDB only).\u003cbr\u003e\nDetached|Top|Left|Width|Height:\nAs with other widgets, the explorer is detachable and the explorer's size + position are settable\nwhen it is detached.\nUnlike with other widgets, changing width may have an effect even if the explorer is not detached.\nThe default width depends on the widths of the object names.\n\u003c/P\u003e\n\n\u003cP\u003e\nOrdinarily the explorer widget appears on the left while the other main widgets\n(history, grid, statement) appear vertically on the right.\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER STYLE. It is a result grid with text columns.\nTherefore users get some features without needing to learn anything new:\u003cbr\u003e\n* ^Find works. (if the item is visible)\u003cbr\u003e\n* Vertical scroll bar works.\u003cbr\u003e\n* Settings | Explorer can be used to change colors and font.\u003cbr\u003e\n* Example: SET ocelot_explorer_text_color='blue' WHERE value = '▶'; REFRESH;\u003cbr\u003e\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER COLUMNS. There are three text columns.\u003cbr\u003e\n#1: Min. = Unicode Black Down-Pointing Triangle ▼ or Black Right-Pointing Triangle ▶ if database or table.\nIf it's a database or table, click on the triangle to hide the parts e.g. columns, or to show them again.\n(This is \"toggling\".)\nIt's treated as a header item, that is, Result Grid Settings for header affect it.\nSo ordinarily it has a different background color.\u003cbr\u003e\n#2: object_type. = S or T or V or C or P or I or E or t\u003cbr\u003e\n#3: object_name. for example, if object_type='T', this is a table name.\u003cbr\u003e\nIf object_type='C', this is a column name and is taken from part_name.\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER ROWS.\nRows are in a hierarchy: S, T or V, C or I, etc.\nWithin the hierarchy, rows are in order by creation time.\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER POSSIBLE USER ACTIONS\u003cbr\u003e\nHover. This will show what type of object is under the cursor and contain some short advice.\u003cbr\u003e\nDoubleClick: This will copy the cell contents to the end of the statement widget\u003cbr\u003e\nRight Click: puts up a context menu.\u003cbr\u003e\nClick on the leftmost (Min) column. This will \"toggle\".\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER CONTEXT MENU.\nThis is the menu that will appear when the user uses the right mouse button to click\nover a row in the explorer display.\nIt is called a context menu because the menu is different for each object type.\nFor example if it's over a table, then table-related menu items will appear.\u003cbr\u003e\nItems for all types: Copy to clipboard, Send to SQL editor, Reset, Refresh.\u003cbr\u003e\nItems for 'S' (Schema): Set as default schema, Filter to this schema, Schema inspector,\nCreate schema, Alter schema, Drop schema.\u003cbr\u003e\nItems for 'T' (Table): Select rows, Export dialog - Text, Export dialog - Table,\nExport dialog - Html, Import - Text, Create table, Create table like, Drop table, Truncate table.\u003cbr\u003e\nFor 'C' (Column): Show column, Drop column.\u003cbr\u003e\nFor 'I' (Index): Show index, Select index, drop index.\u003cbr\u003e\nFor 'P' (Procedure): Create procedure, Drop procedure.\u003cbr\u003e\nDetails for 'T':\n\u003cpre\u003e\n  Copy to Clipboard      Equivalent of \"Copy\"\n  Send to SQL editor     Copy, then put in statement widget, then execute\n  Select rows            Execute a statement to select 100 rows\n  Export Dialog - Text   Dialog box for export, then do the export if OK\n  Export Dialog - Table  Dialog box for export, then do the export if OK\n  Export Dialog - Html   Dialog box for export, then do the export if OK\n  Import - Text          Generate INSERTs for a file's contents, no options\n  Create table           Generate SHOW CREATE TABLE ...\n  Create table like      Generate CREATE TABLE ... LIKE ...\n  Drop table             Generate DROP TABLE\n  Truncate table         Generate TRUNCATE TABLE\n  Reset                  Back to default state with nothing expanded\n  Refresh                Big SELECT to recreate the widget (this can be slow)\n\u003c/pre\u003e\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER EXAMPLE.\u003cbr\u003e\n\u003cP\u003e\nThe user makes the explorer visible with Settings|Explorer Widget, it looks like this:\u003cbr\u003e\n\u003cimg src=\"explorer3.png\" alt=\"explorer3.png\" width=\"300\" height=\"256\"\u003e\u003cbr\u003e\nThe user clicks the ▶ beside information_schema, it changes to ▼\nand the schema items appear:\u003cbr\u003e\n\u003cimg src=\"explorer4.png\" alt=\"explorer4.png\" width=\"300\" height=\"256\"\u003e\u003cbr\u003e\nThe user right-clicks on COLLATIONS, and the context menu appears:\u003cbr\u003e\n\u003cimg src=\"explorer5.png\" alt=\"explorer5.png\" width=\"300\" height=\"256\"\u003e\u003cbr\u003e\nThe user navigates (with the mouse or the down-arrow key) and selects\n(with Enter or Tab or click) the Export dialog - Text choice, and\nthe export dialog appears:\u003cbr\u003e\n\u003cimg src=\"explorer6.png\" alt=\"explorer6.png\" width=\"300\"  height=\"256\"\u003e\u003cbr\u003e\nThe user selects the OK button and the contents are dumped to STDOUT:\u003cbr\u003e\n\u003cimg src=\"explorer7.png\" alt=\"explorer7.png\" width=\"400\"  height=\"256\"\u003e\u003cbr\u003e\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER SET STATEMENTS.\nThe user can enter SET statements on the select widget.\nOr, some SET statements will be generated when the user clicks OK on the Settings menu.\u003cbr\u003e\nKeywords are\nOCELOT_EXPLORER_ACTION,\nOCELOT_EXPLORER_APPLICABLE_DBMSS,\nOCELOT_EXPLORER_APPLICABLE_TYPES,\nOCELOT_EXPLORER_BACKGROUND_COLOR,\nOCELOT_EXPLORER_DETACHED,\nOCELOT_EXPLORER_ENABLED,\nOCELOT_EXPLORER_FONT_FAMILY,\nOCELOT_EXPLORER_FONT_SIZE,\nOCELOT_EXPLORER_FONT_STYLE,\nOCELOT_EXPLORER_FONT_WEIGHT,\nOCELOT_EXPLORER_HEIGHT,\nOCELOT_EXPLORER_LEFT,\nOCELOT_EXPLORER_SHORTCUT,\nOCELOT_EXPLORER_TEXT,\nOCELOT_EXPLORER_TEXT_COLOR,\nOCELOT_EXPLORER_TOP,\nOCELOT_EXPLORER_VISIBLE,\nOCELOT_EXPLORER_WIDTH.\u003cbr\u003e\nThe important one is SET ocelot_explorer_visible='yes';\u003cbr\u003e\nSettings can also be done in the .cnf file or the command line,\nfor example start ocelotgui with --ocelot_explorer_visible='yes'.\u003cbr\u003e\nSuch statements affect both the explorer widget and its context menu.\nNote: some settings changes do not take effect immediately, they are delayed until \"Refresh\" happens.\u003cbr\u003e\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER CONDITIONAL SET STATEMENTS.\nThere is an optional clause ... WHERE VALUE operator 'literal' [{AND|OR} value operator 'literal' ...].\nStatements with WHERE clauses affect only rows which match the expression.\nExample:\u003cbr\u003e\nSET ocelot_explorer_background_color='blue' WHERE value \u003e 'p' OR value regexp '1';\u003cbr\u003e\n\u003cimg src=\"explorer8.png\" alt=\"explorer8.png\" height=\"400\"\u003e\u003cbr\u003e\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER REFRESH STATEMENT.\nREFRESH is a bit similar to REHASH, but it gets all schemas (databases)\n-- so has an effect on the server.\nREFRESH is necessary because we don't know when other users might change data definitions.\nAnd it's slow.\nWhenever users say REFRESH, the explorer tables are redone.\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER IN OPTIONS MENU. Choosing Options|Detach explorer widget,\nand rearranging widgets, could result in something like this:\u003cbr\u003e\n\u003cimg src=\"explorer9.png\" alt=\"explorer9.png\" height=\"400\"\u003e\u003cbr\u003e\n\u003c/P\u003e\n\n\u003cP\u003eEXPLORER ADVANCED-LEVEL CUSTOMIZING.\nAs explained earlier, customizing the appearance of the explorer widget\nand the context menu, or specific rows on them, is simple\nand somewhat like the customizing of the other widgets.\nHowever, one can do more with the context menu -- change the text and\naction and shortcut.\u003cbr\u003e\nHere, for example, is a statement that says\nthere will be a shortcut associated with the Refresh option:\u003cbr\u003e\nSET ocelot_explorer_shortcut='Alt+G' WHERE value = 'Refresh';\u003cbr\u003e\nHere, for example, is a statement that says\n\"Instead of 'Create table', the 'T' menu choice will be\n'Select Count(*)' and the effect, if you click it,\nor type the shortcut key, will be that the\nstatement \"SELECT COUNT(*) FROM (table-name-in-context);\" will appear on the statement widget,\nwhere it is executed, so the result count appears in the grid widget.\u003cbr\u003e\nSET ocelot_explorer_action='SELECT COUNT(*) FROM ${object_name};',\n ocelot_explorer_text='Customized Selection'\nWHERE value = 'Create table';\u003cbr\u003e\nIn other words, users can write their own explorer widgets.\u003cbr\u003e\nMany of the possible actions can have \"macros\"\n-- strings enclosed inside ${...} that will be replaced when the statement is executed.\nSome macros are:\n... ${dialog-table} ${dialog_file} ${occurs_text} ${schema_name} ${object_name}\n'${object_name}' ${part_name} ${unqualified_part_name} '${part_name}'\n${part_type} ${cell} ${clipboard} ${action}.\nSince ocelotgui source code is supplied, users can\ndownload it and see the exact effects by reading the C++ statements in program ocelotgui.cpp,\nfunction Context_menu::replacer().\u003cbr\u003e\n\u003c/P\u003e\n\n\u003cH3 id=\"ERDiagram\"\u003eERDiagram\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003e\n\u003cA href=\"shot2.jpg\"\u003e\u003cimg src=\"shot2.jpg\" alt=\"shot2.jpg\" align=\"right\" height=\"256\"\u003e\u003c/A\u003e\nAn entity relationship diagram (\"ERDiagram\") is a graphic display of tables (in rectangles) and foreign-key relationships\n(as lines). The prerequisite is the existence of an explorer widget, that is,\u003cbr\u003e\nSET ocelot_explorer_visible='yes';\u003cbr\u003e\nis necessary before requesting an ERDiagram.\nAn ERDiagram may either be requested from the explorer or from the statement widget.\nWhen it's requested from the statement widget, the syntax is:\u003cbr\u003e\nSET OCELOT_QUERY = SHOW ERDIAGRAM OF schema_name [COLUMNS PRIMARY] [LINES IN BACKGROUND] [TABLES (table-list];\u003cbr\u003e\nFor example, to get the picture shown here, if you have the well-known \"sakila\" database, say\u003cbr\u003e\nSET OCELOT_QUERY = SHOW ERDIAGRAM OF sakila COLUMNS PRIMARY;\u003cbr\u003e\n\u003c/P\u003e\n\u003cP\u003e\nThe optional clause COLUMNS PRIMARY means \"show only the columns which are part of a primary key instead of all columns\",\nthe optional clause LINES IN BACKGROUND means \"draw lines underneath tables instead of over them\",\nthe optional clause TABLES (table-list) means \"show only the tables in this list instead of all tables\".\nThe table list should be a comma-delimited list of table names and each name can be followed by x and y coordinates,\nfor example \"TABLES (customer 0 1, address 1 1\" means \"display customer in column 0 row 1 and display address in\ncolumn 1 row 1\".\n\u003c/P\u003e\n\u003cP\u003e\nCustomize the display fonts and colors with SET OCELOT_GRID_... statements, for example\nSET OCELOT_GRID_FONT_WEIGHT='bold' WHERE value REGEXP '_id'; will cause column names which end with _id\n(the primary keys) to be displayed with a bold font. Move a mouse over a line to see the foreign key name.\n\u003c/P\u003e\n\n\u003cH3 id=\"charts\"\u003eCharts\u003c/H3\u003e\u003cHR\u003e\n\u003cP\u003e\n\u003cA href=\"shot7.jpg\"\u003e\u003cimg src=\"shot7.jpg\" alt=\"shot7.jpg\" align=\"right\" height=\"50\" width=\"100\"\u003e\u003c/A\u003e\nWhile a result set is visible, if some columns are numeric, press Alt+Shift+B to\ndisplay as a bar chart, Alt+Shift+P to display as a pie chart, Alt+Shift+L to display as a line chart. \nNo plugins or separate programs are necessary.\nBut to customize the look of the charts, you will need client statements.\n\u003c/P\u003e\n\u003cP\u003e\nThe basic statement syntax is\u003cbr\u003e\nSET ocelot_grid_chart = 'literal' [WHERE clause];\u003cbr\u003e\nAfter you've typed SET ocelot_grid_chart = the prompt/autocomplete list wil be\nBAR | LINE | PIE | BAR VERTICAL | BAR STACKED | BAR VERTICAL STACKED | BAR SUBGROUP BY VALUE % 3\n| BAR SUBGROUP BY LEFT(COLUMN_NAME, 2) | LINE SUBGROUP BY LEFT(COLUMN_NAME, 2) | PIE SUBGROUP BY LEFT(COLUMN_NAME, 2) | [string]\n-- and you can make your own combination for example\u003cbr\u003e\nSET ocelot_grid_chart = 'BAR STACKED SUBGROUP BY VALUE % 5';\u003cbr\u003e\nThe optional WHERE may include COLUMN_NAME | COLUMN_NUMBER | COLUMN_TYPE\n(relational operator) (literal value), along with AND|OR, as is usual for\nany SET OCELOT_GRID_... statements. For example\u003cbr\u003e\nSET OCELOT_GRID_chart = 'PIE' WHERE column_name = 'k';\u003cbr\u003e\nSET ocelot_grid_chart=''; will cancel all previous uses of SET ocelot_chart_grid,\nthat is, it turns the feature off.\n\u003c/P\u003e\n\u003cP\u003e\nShortcut key combinations are:\u003cbr\u003e\nAlt+Shift+B causes SET ocelot_grid_chart='bar';\u003cbr\u003e\nAlt+Shift+L causes SET ocelot_grid_chart='line';\u003cbr\u003e\nAlt_Shift+P causes SET ocelot_grid_chart='pie';\u003cbr\u003e\nAlt+Shift+N causes SET ocelot_grid_chart='';\u003cbr\u003e\nAs usual, it is possible to change the key combinations with\nSET ocelot_shortcut... statements.\n\u003c/P\u003e\n\u003cP\u003e\nGROUPS: Charts make sense when representing numbers.\nA \"group\" is any uninterrupted series of numbers in a result-set row.\nFor example, in\u003cbr\u003e\nSELECT 'a',1,2,3.7,4,'b',5e1,6,'c';\u003cbr\u003e\nthe first group is 1,2,3.7,4 and the second group is 5e1,6.\n(That is the default. to change the default, use a WHERE clause.)\n\u003c/P\u003e\n\u003cP\u003eSUBGROUPS. A group may be divided into subgroups.\nSubgrouping is what decides how sampling is done within a group.\nDifferent methods of subgrouping are appropriate for different\ntypes of chart.\u003cbr\u003e\nThere is automatic subgrouping of pies because otherwise all\npie segments would have a single colour.\n(Different subgroups have different colours.)\u003cbr\u003e\nThere is automatic subgrouping of lines because otherwise the\npoints of all lines would be in the same axis and there would\nbe no apparent movement. The automatic subgrouping in this case\nis SUBGROUP BY LEFT(COLUMN_NAME,2) so it need not be specified.\n\u003c/P\u003e\n\u003cP\u003e\nLAYOUT OF A CELL. (After header, not including cell border.)\u003cpre\u003e\n  +--------------------------------------------------+\n  |    TOP                                           |\n  |L |                                              L|\n  |E |   CANVAS                                     E|\n  |F |                                              G|\n  |T |                                              E|\n  |  |                                              N|\n  |  |                                              D|\n  |   _____________________________________________  |\n  |   BOTTOM                                         |\n  +--------------------------------------------------+\n\u003c/pre\u003e\nBut if cell size is small ocelotgui might cancel everything except the canvas.\u003cbr\u003e\nCANVAS: is a non-optional component, it has the actual bar/line/pie chart.\u003cbr\u003e\nLEGEND: is on the RIGHT. Icons and very short text.\u003cbr\u003e\nTOP: text (not shown by default).\u003cbr\u003e\nLEFT: For vertical-bar or line has \"values axis\", for horizontal-bar has \"samples axis\". Text, rotated 90 degrees.\u003cbr\u003e\nLEFT LINE: a straight line between LEFT and canvas.\u003cbr\u003e\nBOTTOM: For horizontal-bar or line has \"values axis\", for vertical-bar has \"samples axis\". Text.\u003cbr\u003e\nBOTTOM LINE: a straight line between canvas and BOTTOM.\u003cbr\u003e\nValues axis: Becomes next to LEFT or BOTTOM in a bar or line.\u003cbr\u003e\nSamples axis: Becomes next to LEFT or BOTTOM in a bar or line.\u003cbr\u003e\n\u003c/P\u003e\n\u003cP\u003e\nIt is possible to cancel or change any item except the canvas.\nSo a fuller statement of the SET syntax can be\u003cpre\u003e\n  SET ocelot_grid_chart = '\n  {BAR|LINE|PIE}          currently default=bar if this is missing, but don't do it\n  [VERTICAL]                        default is horizontal\n  [STACKED]                         default is grouping\n  [TOP=value]                       default is null\n  [RIGHT=value|LEGEND|NULL]         default is LEGEND\n  [LEFT=value|DEFAULT|NULL]         default is DEFAULT\n  [BOTTOM=value|DEFAULT|NULL]       default is DEFAULT\n  [AXIS=NULL|ALL]                   default is ALL, anything but NULL will make axes appear\n                         '\n  WHERE condition];\u003c/pre\u003e\nFor example, to suppress everything except the canvas with a vertical bar chart:\u003cbr\u003e\nSET ocelot_grid_chart='BAR VERTICAL RIGHT=NULL LEFT=NULL BOTTOM=NULL AXIS=NULL';\u003cbr\u003e\nFor example, to add a top line along with the other components with a pie:\u003cbr\u003e\nSET ocelot_grid_chart='PIE TOP=TOPPER';\u003cbr\u003e\n\u003c/P\u003e\n\u003cP\u003e\nEFFECTS OF OTHER SETTINGS:\u003cbr\u003e\nSET ocelot_grid_font=... affects what font the text items have.\u003cbr\u003e\nSET ocelot_grid_cell_border_size=... affects the width of lines.\u003cbr\u003e\nAnd other ocelot_grid settings may affect all cells including cells with charts.\u003cbr\u003e\nAny item value might be truncated. An easy way to change width of a single chart\nis to use long column names, that is, instead of saying SELECT 1, 2, 3; say\u003cbr\u003e\nSELECT 1 AS really_long_column_name, 2, 3;\u003cbr\u003e\nbut for some charts it is possible to use \"SET ocelot_grid_cell_width=...\" instead.\n\u003c/P\u003e\n\u003cP\u003e\nILLUSTRATIONS. Pictures showing effects are in a blog post:\n\u003ca href=\"http://ocelot.ca/blog/blog/2023/08/08/charts/\"\u003eCharts\u003c/a\u003e.\nThe current output may look slightly different from the illustrations there,\nand the Qwt library is no longer necessary.\n\n\u003cH3 id=\"make-menus\"\u003eMake your own menus\u003c/H3\u003e\u003cHR\u003e\n\u003cP\u003e\nThere are SQL-like statements for manipulating the main menus.\nThey all begin with SET ocelot_query =, and they are all client statements.\nYou can execute them without being connected to a DBMS server.\u003cpre\u003e\nSET ocelot_query =\n  SELECT * FROM menus;\nSET ocelot_query =\n  DELETE FROM menus WHERE id = 'id';\nSET ocelot_query =\n  UPDATE menus SET menuitem | shortcut | action = 'literal' WHERE id = 'id';\nSET ocelot_query =\n  INSERT INTO menus VALUES ('id', 'menu-title', 'menu-item', 'action');\u003c/pre\u003e\n\u003c/P\u003e\n\u003cP\u003e\nSELECT result columns are ID (a unique value which you need to know for the WHERE clause in\nother menu statements), MENU_TITLE (the name of a menu), MENU_ITEM (the name of a menu item\nwithin a menu), ACTION (what happens when you select a menu item), SHORTCUT (a keysequence\nthat does the same thing as selecting the menu item). Initially the ACTION column will have\n\"[menu]\" for a menu, \"[separator]\" for a line that sometimes is drawn between menu items,\nand function names for every menu item. (You would see the same function names if you looked\nat the ocelotgui source code.) \n\u003c/P\u003e\n\u003cP\u003e\nSuppose you want to remove the File|Exit menu item. You would first use SELECT to see that\nthe ID is action_file_exit. Then SET ocelot_query = DELETE FROM menus WHERE id = 'action_file_exit';\nwill remove it. But you could put it back later with SET ocelot_query = INSERT INTO menus\nVALUES ('action_file_exit', 'File', 'Exit', 'action_file_exit');.\n\u003c/P\u003e\n\u003cP\u003e\nSuppose you want to change the Edit|Cut menu item to Edit|Couper. You would first use SELECT\nto find that the ID is action_edit_cut. Then SET ocelot_query = UPDATE menus SET menu_item\n= 'Couper' WHERE id = 'action_edit_cut'; will change it. Then you can change the shortcut,\nwith SET ocelot_query = UPDATE menus SET shortcut = 'Ctrl+Shift+X' WHERE id = 'action_edit_cut';\nas described earlier.\n\u003c/P\u003e\n\u003cP\u003e\nSuppose you want to make a completely new menu with your own names and actions.\nYou don't need to insert a \"[menu]\" row, that will happen automatically when you insert a menu item.\nSo SET ocelot_query = INSERT INTO menus VALUES ('new_cut', 'NEW', 'Cut!', 'action_edit_cut'); will\nmake a new menu and a new menu item NEW|Cut! with an action that does the same thing as Edit|cut.\nThen SET ocelot_query = INSERT INTO menus VALUES ('new_sql', 'NEW', 'SQL!', 'SELECT 5 AS five, 6 AS six UNION ALL  SELECT 5, 6;'); will make a new menu item NEW|SQL! that causes an SQL statement.\nSo now the menu looks like this:\u003cbr\u003e\n\u003cimg src=\"menunew.png\" alt=\"menunew.png\" width=\"300\" height=\"140\"\u003e\u003cbr\u003e\nSo whenever you have stock SQL statements, or a series of SQL statements, that you might want to\nrepeat frequently, you don't have to store them in a file and read the file with SOURCE. You can\nhave them in the menu. Just remember: they must end with a semicolon.\n\u003c/P\u003e\n\u003cP\u003e\nYou can also make a menu whose action is a plugin. Plugins are described in the next section.\n\u003c/P\u003e\n\u003cH3 id=\"plugins\"\u003eMake your own plugins\u003c/H3\u003e\u003cHR\u003e\n\u003cP\u003e\nA plugin is a routine in a library.\nThere are SQL-like statements for manipulating the plugins.\nThey all begin with SET ocelot_query =, and they are all client statements.\nYou can execute them without being connected to a DBMS server.\u003cpre\u003e\nSET ocelot_query =\n  SELECT * FROM plugins;\nSET ocelot_query =\n  DELETE FROM plugins WHERE action = 'action';\nSET ocelot_query =\n  INSERT INTO plugins VALUES ('library', 'action');\u003c/pre\u003e\n... where ACTION is the name of the routine in the library.\nWhat the routine does is up to you, you have to write it, in C or C++.\nThe description here is only about the SQL-like statements.\n\u003c/P\u003e\nAgain, SELECT is useful for seeing what plugins have been inserted, and DELETE is useful for undoing.\nThe INSERT will cause ocelotgui to search for a library (called a .so with Linux or a .dll with Windows),\nand within that to search for a routine. There are two kinds of plugins: \"trigger plugins\" and \"menu plugins\".\n\u003cP\u003e\nWhen ocelotgui reaches one of a certain set of preset points in its code, it calls a\ntrigger plugin with a structured parameter that contains a lot of information about\nstate, values of current variables, and permanent settings. The trigger plugin can\nact on the information, and in some cases can change it. For example, ocelotgui can call a trigger\nplugin whenever it is about to pass an SQL statement to the server, and the plugin can log the\nrequest then change the SQL statement to something completely different.\n\u003c/P\u003e\n\u003cP\u003e\nWhen a menu item has an action that is not one of the 'action_*' routines within the ocelotgui code,\nand is not an SQL statement ending with ';', it looks for a menu plugin and calls it. For example,\nafter SET ocelot_query = INSERT INTO plugins VALUES ('/home/pgulutzan/plugin/libplugin.so', 'menu_action');\nand after SET ocelot_query = INSERT INTO menus VALUES ('menu_action', 'NEW', 'The Example', 'menu_action');\nand after SET ocelot_query = UPDATE menus SET shortcut = 'Shift+F12' WHERE id = 'menu_action';\nand after the user either clicks the NEW/The Example menu item or types Shift+F12, the menu_action\nfunction in libplugin.so will run.\n\u003c/P\u003e\n\u003cP\u003e\nThis is not a manual about C/C++ coding so the rest is up to you.\nBut to make it as simple as possible, ocelotgui is packaged with a file named plugin.c.\nIt contains several example functions and several hundred words of commentary.\n\u003c/P\u003e\n\n\u003c/P\u003e\n\n\u003cH3 id=\"contact\"\u003eContact\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eWe need feedback!\u003c/P\u003e\n\n\u003cP\u003eRegistered github users can simply go to\n\u003cA HREF=\"https://github.com/ocelot-inc/ocelotgui\"\u003ehttps://github.com/ocelot-inc/ocelotgui\u003c/A\u003e\nand click the \"Star\" button.\u003c/P\u003e\n\n\u003cP\u003eSend bug reports and feature requests to\n\u003cA HREF=\"https://github.com/ocelot-inc/ocelotgui/issues\"\u003ehttps://github.com/ocelot-inc/ocelotgui/issues\u003c/A\u003e.\nOr send a private note to pgulutzan at ocelot.ca.\u003c/P\u003e\n\n\u003cP\u003eThere may be announcements from time to time on Ocelot's\nweb page (ocelot.ca) or on the employee blog (\u003cA HREF=\"http://ocelot.ca/blog\"\u003ehttp://ocelot.ca/blog\u003c/A\u003e).\u003c/P\u003e\n\n\u003cP\u003eAny contributions will be appreciated.\u003c/P\u003e\n\n\u003cH3 id=\"Appendix-1\"\u003eAppendix 1 Details about ocelotgui options\u003c/H3\u003e\u003cHR\u003e\n\nAn option is a named value which affects connecting and behavior.\nMost [ocelot] options are very similar to options of the mysql client.\n\u003cbr\u003e\u003cbr\u003e\nThe places that an option might be specified are:\nwithin the program for example the default port value is 3306,\nin an environment variable for example \"export MYSQL_TCP_PORT=3306\",\nin a configuration file for example \"port=3306\" in $HOME/.my.cnf,\non the command line for example \"./ocelotgui --port=3306\",\nor on the File|Connect dialog box.\n\u003cbr\u003e\u003cbr\u003e\nEnvironment Variables. The ocelotgui program will look at these variables:\nHOME, LD_RUN_PATH, MYSQL_GROUP_SUFFIX, MYSQL_HISTFILE,\nMYSQL_HISTIGNORE, MYSQL_HOST, MYSQL_PS1, MYSQL_PWD.\nMYSQL_TCP_PORT, MYSQL_UNIX_PORT, MYSQL_TEST_LOGIN_FILE.\n\u003cbr\u003e\u003cbr\u003e\nOption Files: The ocelotgui program will look in these option files:\n/etc/my.cnf, /etc/mysql/my.cnf, [SYSCONFDIR]/my.cnf,\n[defaults-extra-file], $HOME/.my.cnf, $HOME/.mylogin.cnf.\nWithin option files, the ocelotgui program will look\nin these groups: [client] [mysql] [ocelot], as well\nas groups specified by MYSQL_GROUP_SUFFIX.\nOn Windows, the order is different: %system, %windir,\n[application-directory], %MYSQL_HOME%, [defaults-extra-file].\n\u003cbr\u003e\u003cbr\u003e\nCommand Line: The ocelotgui program will look at command-line arguments\nwhich are specified in short form such as \"-P 3306\", or\nwhich are specified in long form such as \"--port=3306\".\n\u003cbr\u003e\u003cbr\u003e\nDialog Box: A dialog box will appear if the user enters a user statement\n\"CONNECT;\" or if the user chooses menu item File|Connect.\nThe user will be advised to do this at startup time if an\ninitial attempt to connect fails.\n\u003cbr\u003e\u003cbr\u003e\nExample\n\u003cbr\u003e\nThe default value for \"port\" is 3306, this is\nhard coded in the ocelotgui source.\u003cbr\u003e\nThe environment variable value for \"port\" is 3307, this is\nset by \"export MYSQL_TCP_PORT=3307\" before starting ocelotgui.\u003cbr\u003e\nThe option file value for \"port\" is 3308, this is\nset by putting \"PORT=3308\" in the [mysql] group in\nthe $HOME/.mysql.cnf file.\u003cbr\u003e\nThe command-line value for \"port\" is 3309, this is\nset by putting \"--port=3309\" on the command line\nwhen starting the ocelotgui program.\u003cbr\u003e\nThe dialog-box value for \"port\" is 3310, this is\nset by choosing File|Connect, entering \"3310\" in\nthe widget labelled \"Port\", and clicking \"OK\".\u003cbr\u003e\nThe ocelotgui program reads the settings in the\nabove order, therefore the port number is 3310.\n\u003cbr\u003e\u003cbr\u003e\nOptions in the following table are in the same order that one sees\non the File|Connect dialog box: first come the 8 important connect\noptions (including host, port, user, database, password,\ninit_command), then all the other options in alphabetical order.\u003cbr\u003e\nUnless otherwise stated, options are specifiable by saying\u003cbr\u003e\n[option_name] = [value] in an option file or\u003cbr\u003e\n--[option_name] = [value] on the command line\u003cbr\u003e\n(sometimes --[option_name] alone is sufficient for true|false values),\nor in the dialog box.\u003cbr\u003e\nIf an option value is irrelevant or invalid, the ocelotgui program\nignores it without displaying an error message.\n\n \u003ctable border=\"1\" style=\"width:100%;background-color: #f1f1c1\"\u003e\n \u003ctr\u003e\n \u003cth\u003eOption\u003c/th\u003e\n \u003cth\u003eDescription\u003c/th\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n \u003ctd valign=\"top\"\u003ehost\u003c/td\u003e\n \u003ctd valign=\"top\"\u003eServer address. Specifiable with MYSQL_HOST\nenvironment variable, with host= in an option file, with\n-h or --host on the command line, or in dialog box.\nExample values: localhost 192.15.8.44 w@ww.com.\nWarning: if host=localhost, ocelotgui tries to use a socket,\nif this is not desirable then say localhost=127.0.0.1 instead.\u003c/td\u003e\n \u003c/tr\u003e\n \u003ctr\u003e\n \u003ctd valign=\"top\"\u003eport\u003c/td\u003e\n \u003ctd valign=\"top\"\u003ePort that the server listens on, if the protocol is\nTCP. Specifiable with\nMYSQL_TCP_PORT environment variable, with port= in an option\nfile, with -P or --port on the command line, or in dialog box.\nExample values: 3306 3307.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003euser\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e User name. Specifiable with user= in an option file,\nwith -u or --user on the command line, or in dialog box.\nExample values: root guest jsmith.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edatabase\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDatabase name also known as schema name. Specifiable\nwith database= in an option file, with -D or --database on the\ncommand line, or in dialog box. Example values: test account_data.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003esocket\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eSocket name that the server receives on, if the\nprotocol is SOCKET. Specifiable with socket= in an option file,\nwith -S or --socket= on the command line, or in dialog box.\nExamples: var/lib/special.sock /home/user/x.sock.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003epassword\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ePassword associated with the user. Specifiable\nwith password= in an option file, with -p or --password= on\nthe command line, or in dialog box. If the password is\nrequired but not specified, the dialog box will always appear.\nExamples: sesame top_secret#1\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eprotocol\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eHow the connection to the server occurs. Possible\nvalues are: blank or TCP or SOCKET. If host=localhost and\nprotocol is blank, then SOCKET is assumed. Specifiable with\nprotocol= in an option file, with --protocol= on the command\nline, or in dialog box. Examples: tcp socket.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003einit_command\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eInitial statement that should be executed as\nsoon as connect is complete. Example: \"select current_user()\".\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eauto_rehash\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui may try to\ncomplete names.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eauto_vertical_output\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui will display\nwith one column per row.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ebatch\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eMostly ignored, but if 1 (true), history is not written.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ecompress\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), value is passed to the server.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003econnect_expired_password\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui goes into\nsandbox mode if a password has expired at connect time.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003econnect_timeout\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edebug\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edebug_check\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edebug_info\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edefault_auth\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edefault_character_set\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored, ocelotgui needs UTF-8.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edefaults_extra_file\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eName of an additional option file.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edefaults_file\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edefaults_group_suffix\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eSuffix that is added to the regular group\nnames for option files. For example, if defaults_group_suffix=_X,\nthen ocelotgui will look at options in groups client_X and mysql_X and\nocelot_X in addition to options in groups client and mysql and ocelot.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003edelimiter\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eWhat ends a statement, usually semicolon \";\".\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eenable_cleartext_plugin\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eexecute\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eString to execute followed by program exit.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eforce\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored, ocelotgui always ignores errors in options.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ehelp\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eDisplay a help message followed by program exit.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ehistfile\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eName of file where statements are logged to, usually\n\".mysql_history\". Ignored if batch=1. Ignored if\nhistfile=/dev/null.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ehistignore\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ePattern to ignore when writing to histfile.\nFor example, if histignore is \"*select*\", then statements\ncontaining the string \"select\" will not be written.\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ehtml\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eInternally formats are HTML anyway even if one says\nhtml=0, unless one starts with one of the non-HTML options such as\nbatch or xml. If one starts ocelotgui with --html --raw,\nthe actual html markup code will appear.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eignore_spaces\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eld_run_path\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eWhere to look for libmysqlclient.so. Click help|libmysqlclient\nfor details.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eline_numbers\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003elocal_infile\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), passed to the server.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003elogin_path\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eWhere to find login file if it's not \"~/.mylogin.cnf\".\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003emax_allowed_packet\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ePassed to the server. Default 16777216.\u003c/td\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003emax_join_size\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ePassed to the server. Default 1000000.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003enamed_commands\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003enet_buffer_length\u003c/td\u003e\n\u003ctd valign=\"top\"\u003ePassed to the server. Default 16384.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eno_beep\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored, ocelotgui does not usually beep when errors occur.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eno_defaults\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), options in environment variables and option\nfiles are read but not used.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e... Options that begin with \"ocelot_\" are only recognized\nby the ocelotgui client. Everything on the Settings menu has an\nassociated option name. The intuitively-named settings options are:\nocelot_explorer_action ocelot_explorer_applicable_dbmss ocelot_explorer_applicable_types\nocelot_explorer_background_color ocelot_explorer_detached ocelot_explorer_enabled\nocelot_explorer_font_family ocelot_explorer_font_size ocelot_explorer_font_style\nocelot_explorer_font_weight ocelot_explorer_height ocelot_explorer_left\nocelot_explorer_shortcut ocelot_explorer_text ocelot_explorer_text_color\nocelot_explorer_top ocelot_explorer_visible ocelot_explorer_width\nocelot_extra_rule_1_text_color ocelot_extra_rule_1_background_color\nocelot_extra_rule_1_condition ocelot_extra_rule_1_display_as\nocelot_grid_text_color ocelot_grid_background_color\nocelot_grid_header_background_color\nocelot_grid_font_family ocelot_grid_font_size ocelot_grid_font_style\nocelot_grid_font_weight ocelot_grid_cell_border_color\nocelot_grid_cell_border_size ocelot_grid_detached\nocelot_grid_html_settings\nocelot_grid_left\nocelot_grid_top\nocelot_grid_width\nocelot_grid_height\nocelot_grid_focus_cell_background_color\nocelot_grid_outer_color\nocelot_grid_cell_height\nocelot_grid_cell_width\nocelot_grid_tabs\nocelot_grid_tooltip\nocelot_history_text_color ocelot_history_background_color\nocelot_history_border_color ocelot_history_font_family\nocelot_history_font_size ocelot_history_font_style\nocelot_history_font_weight ocelot_menu_text_color ocelot_history_detached\nocelot_menu_background_color ocelot_menu_border_color\nocelot_menu_font_family ocelot_menu_font_size\nocelot_menu_font_style ocelot_menu_font_weight\nocelot_statement_text_color ocelot_statement_background_color\nocelot_statement_border_color ocelot_statement_font_family\nocelot_statement_font_size ocelot_statement_font_style\nocelot_statement_font_weight ocelot_statement_highlight_literal_color\nocelot_statement_highlight_identifier_color ocelot_statement_highlight_comment_color\nocelot_statement_highlight_operator_color ocelot_statement_highlight_keyword_color\nocelot_statement_prompt_background_color ocelot_statement_highlight_function_color\nocelot_statement_highlight_current_line_color ocelot_statement_detached.\nSee also: the ocelot_ options which aren't related to Settings, below.\u003c/td\u003e\nSee also: the example.cnf file.\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_client_side_functions\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e ocelot_client_side_functions=0 turns off\nthe client-side functions, such as \"select row_number() over ...\".\nThis may be unnecessary with newer versions of MariaDB.\nThe default is 1.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_dbms\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e--ocelot_dbms=x means assume the server DBMS is x\nuntil connection is made. The possible values are 'mysql',\n'mariadb', and 'tarantool'. The default is 'mysql'.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_grid_tabs\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eocelot_grid_tabs=5\nmeans assume that a stored procedure can return up to 5 result sets.\nThe default is 16.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_language\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e--ocelot_language='english' means the menu and the\nclient error messages should be in English, --ocelot_language='french'\nmeans the menu and the client error messages should be in French.\nThe default is 'english'.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_statement_syntax_checker\u003c/td\u003e\n\u003ctd valign=\"top\"\u003esetting\nocelot_statement_syntax_checker=1 turns on the\nsyntax checker; setting ocelot_statement_syntax_checker=2\nturns on the syntax checker and is insistent -- if ocelotgui\ndoesn't like the syntax checker, a confirmation dialog box\nwill appear. The default is 1.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eocelot_shortcut_*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eocelot_shortcut_connect, ocelot_shortcut_exit, etc. ...\nYou can change what the shortcut is, for any menu\nitem, by specifying its name and a new keysequence.\nFor example: SET ocelot_shortcut_paste = 'Ctrl+Shift+K';\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eone_database\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003epager\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003epipe\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eplugin_dir\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eprint_defaults\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui displays defaults and exits.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eprompt\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eWhat to display on left of statement lines.\nDefault is \"mysql\u003e\".\nThe prompt can include special character sequences\nfor date, time, and line number.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003equick\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eraw\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ereconnect\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003esafe_updates\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui passes 1 to the server.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003esecure_auth\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui passes 1 to the server.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eselect_limit\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eThe maximum number of rows to select; default is 0\nwhich means infinity; ocelotgui passes this to the server.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eserver_public_key\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eshared_memory_base_name\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eshow_warnings\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui displays warnings which\nresult from problems that the server detects.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003esigint_ignore\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui will not stop statements\nwhen user types control-C or chooses the menu item Run|Kill.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003esilent\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003essl_*\u003c/td\u003e\n\u003ctd valign=\"top\"\u003essl, ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_crl,\nssl_crlpath, ssl_key, ssl_verify_server_cert. SSL options\nare accepted and passed to the server.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003esyslog\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003etable\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003etee\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eName of a file to dump statements and results to.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eunbuffered\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003everbose\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003eversion\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), ocelotgui displays a version number and exits.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003evertical\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf 1 (true), results are displayed with one column\nper line.\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003ewait\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIgnored.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003exml\u003c/td\u003e\n\u003ctd valign=\"top\"\u003eIf one starts with ocelotgui --xml, the grid display will\nshow raw xml. See also --html.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cH3 id=\"Appendix-2\"\u003eAppendix 2 Debugger\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThe reason that there is a menu item for a debugger is that ocelotgui\nincludes a debugger for SQL stored procedures.\nThe reason that the menu item is disabled is that Tarantool does not\nsupport stored procedures. However, it is not impossible that this will\nbe enabled someday. For a look at one direction that development might\ntake, see the ocelot.ca blog post\n\u003ca href=\"http://ocelot.ca/blog/blog/2020/01/12/convert-sql-stored-procedures-to-lua-functions/\"\u003eConvert SQL Stored Procedures to Lua Functions\u003c/a\u003e.\n\u003c/P\u003e\n\n\u003cH3 id=\"Appendix-3\"\u003eAppendix 3 Tarantool\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThe assumption is that users have a reasonably current\nversion of Tarantool as downloaded according to the instructions in\n\u003cA HREF=\"https://www.tarantool.io/en/download\"\u003e in the Tarantool manual\u003c/A\u003e;\nhowever, slightly earlier versions and slightly later versions will work.\nThe ocelotgui program will change its parsing to match the version.\u003c/P\u003e\n\n\u003cP\u003eThe history widget can contain a copy of the result set,\nif one clicks Settings | History Widget and sets a non-zero\nin the Max Row Count box. The format looks like what comes\nout of the mysql non-GUI table display to make copying easier.\nThis format might change to match the Tarantool console fselect display.\u003c/P\u003e\n\n\u003cP\u003eUsually you do not need to install the Tarantool client (libtarantool.so) library,\nbut it is possible to use it if you build ocelotgui with \"cmake ... -DOCELOT_THIRD_PARTY=0\".\nIf you did that, then this is how to get tarantool.so.\nThe tarantool-dev package does not have it any more.\nClone and follow the instructions at\ngithub.com/tarantool/tarantool-c ...\u003cpre\u003e\ncd ~\ngit clone https://github.com/tarantool/msgpuck.git tarantool-msgpuck\ncd tarantool-msgpuck\ncmake .\nmake\nsudo make install\ncd ~\ngit clone https://github.com/tarantool/tarantool-c tarantool-c\ncd tarantool-c\ncp ~/tarantool-msgpuck/msgpuck.h third_party/msgpuck/msgpuck.h\ncmake .\nmake\nsudo make install\u003c/pre\u003e\nWARNING: in the past the tarantool-c folks have changed\nstructs in the public API. If they do it again, ocelotgui\nwill crash.\u003cbr\u003e\nWARNING: On some distros the installation will be to a\ndirectory that is not on the distro's default path.\nFor example, if libtarantool.so ends up on /usr/local/lib,\nyou will have to say this before you start ocelotgui:\u003cbr\u003e\nexport LD_RUN_PATH=/usr/local/lib\u003cbr\u003e\nOr you can add --ld_run_path=/usr/local/lib on the\ncommand line where you start ocelotgui.\nOn Windows you do not need to install a\nTarantool library, its code is embedded in ocelotgui.exe.\u003c/P\u003e\n\n\u003cP\u003eYou need the latest ocelotgui client.\nThe Release 2.4.0 version is okay at the time of release,\nbut some things might not be up to date.\nIt may be better to build it from source.\nDownload from github.com/ocelot-inc/ocelotgui.\u003c/P\u003e\n\n\u003cP\u003eFor this example we assume Tarantool 2.x. Start the Tarantool server, and say:\u003cbr\u003e\nbox.cfg{listen=3301}\u003cbr\u003e\n-- Second connect if you want LUA '...' to work\u003cbr\u003e\nbox.schema.user.grant('guest','read,write,execute','universe')\u003cbr\u003e\nnet_box = require('net.box')\u003cbr\u003e\nocelot_conn2=net_box.new('localhost:3301')\u003cbr\u003e\nocelot_conn2:eval('return 5')\u003cbr\u003e\nNB: user 'guest' can read and write but not create. Therefore\nfor demonstration purposes it is far better to be user 'admin'.\nTo assign a password to user 'admin', say:\u003cbr\u003e\nbox.schema.user.passwd('admin')\u003c/P\u003e\n\n\u003cP\u003eStart ocelotgui thus:\u003cbr\u003e\nocelotgui --ocelot_dbms='tarantool' --port=3301 --host='localhost' --user='admin' --password='admin'\u003cbr\u003e\nThe initial screen should come up saying \"OK\", you're connected.\u003c/P\u003e\n\n\u003cP\u003eType some SQL statements in the statement widget\nat the bottom of the screen.\u003cpre\u003e\nCREATE TABLE test1 (s1 INT PRIMARY KEY, s2 VARCHAR(5));\nINSERT INTO test1 VALUES (1,'a'),(2,'b'),(3,'c');\nUPDATE test1 set s2 = s2 || '!';\nSELECT * FROM test1;\u003c/pre\u003e\nYou'll see the usual hints appearing as you type.\nYou'll see the usual grid display when you type\nEnter, or control-E.\u003c/P\u003e\n\n\u003cP\u003eNow type any other SQL statements, as described\nin the Tarantool manual.\nThe \u003cA href=\"https://www.tarantool.io/en/doc/2.4/tutorials/sql_tutorial/\"\u003etutorial SQL statements\u003c/A\u003e\nwork.)\u003c/P\u003e\n\n\u003cP\u003eNow type\u003cbr\u003e\nLUA 'return box.space._vindex:select()';\u003cbr\u003e\nor simply\u003cbr\u003e\nreturn box.space._index:select();\u003cbr\u003e\nThis will evaluate the expression, without SQL.\nThe expression must return a result set.\nThe result will be tabular (rows and columns),even though box.space._vindex was created with NoSQL.\u003c/P\u003e\n\n\u003cP\u003eBonus feature: A client statement,\u003cbr\u003e\nCREATE SERVER id ... OPTIONS (PORT ..., HOST ..., USER ..., PASSWORD ...);\u003cbr\u003e\nallows a second connection. Usually this is a connection\nto a different server.\u003cbr\u003e\nLater you can use the second connection to create an SQL table\nthat's populated from a NoSQL space, preserving\nall the data and converting it to fit in table rows,\npreserving names if they were made with a Tarantool\nformat clause.\u003cbr\u003e\n* The advantage is that the second server does no work\nexcept (lua box.space.x:select); the main server makes a\ntemporary copy of the result set and the main server\ndoes all work required for select-list computations,\ngroup by, order by, etc. That should enhance throughput.\nAnd, since it's now an SQL table, you can create indexes\non it and do SQL manipulations without needing NoSQL.\u003cbr\u003e\n* The limitation is that you are now working on a copy\ninstead of the original; it might quickly go out of date.\n* The big limitation is that the first column of the new\ntable is automatically and always the PRIMARY KEY.\nTherefore if there is any duplication in the space,\nthe CREATE TABLE statement will fail.\u003cbr\u003e\nExample:\u003cpre\u003e\n  On #1 (server/lua):\n  box.cfg{listen=3301}\n  box.schema.user.grant('guest','read,write,execute','universe')\n  box.sql.execute([[create table a (s1 int primary key, s2 varchar(15));]])\n  box.sql.execute([[insert into a values (1,'wombat');]])\n  On #2 (server/lua)\n  box.cfg{listen=3302}\n  box.schema.user.grant('guest','read,write,execute','universe')\n  box.sql.execute([[CREATE TABLE t2 (x1 INT PRIMARY key, x2 VARCHAR(15));]])\n  box.sql.execute([[INSERT INTO t2 VALUES (0, 'Hi!');]])\n  On ocelotgui connection:\n  CREATE SERVER id FOREIGN DATA WRAPPER ocelot_tarantool OPTIONS (PORT 3302, HOST 'localhost', USER 'guest');\n  CREATE TABLE y4 SERVER id LUA 'return box.space._space:select()';\n  SELECT * FROM y4;\n-- It does not have to be a second server, so simplify the example.\n-- It does not have to be LUA '...', it can be RETURN lua-expression.\n-- We can have MariaDB=main and Tarantool=remote, or Tarantool=main and Tarantool=remote\u003c/pre\u003e\u003c/P\u003e\n\n\u003cP\u003eImages:\u003cbr\u003e\nDoubtless you have image (.png or .gif or .jpg) files on your system.\nFor this example, change the three \"box.space.timages:insert\" lines,\nchanging the file names to file names that are on your system, or\nchanging the directory to wherever you installed ocelotgui documentation.\nThen \"copy\" the example code here and \"paste\" it into the ocelotgui\nstatement widget. (Sometimes it is better to copy and paste statements\none at a time rather than all at once.)\n(Important: \"timages\" is a quoted identifier, the quote marks are necessary.)\u003c/P\u003e\n\u003cpre\u003e\n-- Lua function to set a variable to a file contents: based on fio_read.lua:\nfunction load_file(file_name)\n  local fio = require('fio')\n  local errno = require('errno')\n  local f = fio.open(file_name, {'O_RDONLY' })\n  if not f then\n    error(\"Failed to open file: \"..errno.strerror())\n  end\n  local data = f:read(1000000)\n  f:close()\n  return data\nend;\nDROP TABLE \"timages\";\ncreate table \"timages\" (s1 int PRIMARY KEY, s2 scalar, s3 varchar(5));\nbox.space.timages:insert{1, load_file('/usr/share/doc/ocelotgui/shot1.jpg'), 'shot1'};\nbox.space.timages:insert{2, load_file('/usr/share/doc/ocelotgui/shot2.jpg'), 'shot2'};\nbox.space.timages:insert{3, load_file('/usr/share/doc/ocelotgui/shot3.png'), 'shot3'};\nSET ocelot_extra_rule_1_display_as = 'image';\nSET ocelot_extra_rule_1_condition = 'data_type LIKE ''%BLOB''';\nSELECT * FROM \"timages\";\n\nAlternative: (details are left to the reader's imagination) We could instead use:\n\u003ca href=\"https://www.tarantool.io/en/doc/latest/reference/reference_sql/sql_plus_lua/#calling-lua-routines-from-sql\"\u003ea Lua function\u003c/a\u003e.\n\u003c/pre\u003e\n\n\u003cP\u003e\nRules concerning ocelotgui when connecting to tarantool:\u003cbr\u003e\n* All statements must end with ; (or something established by DELIMITER statement).\n  This applies to Lua as well as SQL.\u003cbr\u003e\n* If you want a result set for a Lua request, you must say \"return\".\n  For example \"return box.space.T:select();\" rather than \"box.space.T:select();\"\u003cbr\u003e\n* SQL-style comments /* ... */ will not be considered errors inside Lua statements,\n  but will not be passed to the server.\u003cbr\u003e\n* Statements may contain [[...]] strings, but not =[[...]]= strings.\u003cbr\u003e\n* Defaults are MySQL/MariaDB defaults:\n  --delimiter is off\n  but ansi_quotes is on.\u003cbr\u003e\n* (Possible flaw) When ocelotgui is displaying an image, cpu time rises.\u003cbr\u003e\n* Decisions to right-justify, or display as images, are automatic rather than dependent on data type.\u003cbr\u003e\n* SQL \"verbs\", for example COMMIT, should not be used as Lua identifiers.\u003cbr\u003e\n* If you use SQL, you need Tarantool 2.1 or (preferably) a later version. If you only use Lua, you can use Tarantool 1.10 or an earlier version.\u003cbr\u003e\n* We don't accept identifiers longer than 64 characters.\u003c/P\u003e\n\n\u003cP\u003e\nIf the Tarantool server version release date is after the date of the\nocelotgui release, then there will probably be problems because the parsers\nare different. Sometimes this can be solved by downloading ocelotgui source\nand building again.\u003c/P\u003e\n\n\u003cH3 id=\"Appendix-4\"\u003eAppendix 4 Windows\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eThese are extra instructions for ocelotgui for Microsoft Windows (TM).\u003c/P\u003e\n\n\u003cP\u003eThe Windows ocelotgui program has the same functionality\nas the Linux ocelotgui program, but is newer and has only\nbeen tested with basic Windows 10 64-bit machinery.\nWe believe that on some other Windows platforms it won't start.\u003c/P\u003e\n\n\u003cP\u003eConnection should work to any modern Tarantool server.\u003c/P\u003e\n\n\u003cP\u003e\nHow to get it:\u003cbr\u003e\n* Download the ocelotgui zip file from github.\n  Check https://github.com/ocelot-inc/ocelotgui/blob/master/README.md\n  to see where the latest release is. For example it might be\n  https://github.com/ocelot-inc/ocelotgui/releases/download/2.4.0/ocelotgui-2.4.0-1.ocelotgui.zip\u003cbr\u003e\n* Unzip. It was zipped with 7-zip from http://www.7-zip.org,\n  but other utilities should work. For example, on Windows command prompt,\n  if you have the PowerShell utility on your path:\n  PowerShell Expand-Archive ocelotgui-2.4.0-1.ocelotgui.zip c:\\ocelotgui\u003cbr\u003e\n* Read the COPYING and LICENSE arrangements.\n  On Windows ocelotgui is statically linked to Qt and MariaDB libraries,\n  so the copyright and licensing is not the same as for Linux.\u003cbr\u003e\n* The unzipped package includes a file named ocelotgui.exe.\n  This is the file that you need for day-to-day ocelotgui use.\n  There is no installation file.\n  There is no need to download a MySQL/MariaDB client library.\n  There is no need to download a Qt library.\n  Since ocelotgui.exe may read other files on the same directory,\n  it is best to leave it in the directory that you unzipped to.\u003c/P\u003e\n\n\u003cP\u003eHow to test it:\u003cbr\u003e\nStart up a Tarantool server that is easily accessible\n(ocelotgui can use SSL etc. but for an initial test make it easy).\nLet's assume the download directory is c:\\ocelotgui.\nLet's assume the host is 192.168.1.65, the user name is 'root',\nthe password is 'root',  the port is 3306. Say:\u003cbr\u003e\nc:\\ocelotgui.exe --port=3306 --host=192.168.1.65 --port=3306 --user=root --password=root --protocol=tcp\u003c/P\u003e\n\n\u003cP\u003eFull instructions are in the main documentation.\nThe following notes are specifically for ocelotgui for Windows.\u003cbr\u003e\n* When connecting, use protocol=tcp.\u003cbr\u003e\n* this is a 32-bit .exe file\u003cbr\u003e\n* these DLLs are used ... (they're all supplied with Windows 10)\n   ntdll.dll, wow64.dll, wow64win.dll, wow64cpu.dll\n   -- should be in system32 for 32-bit process running on a 64-bit computer\u003cbr\u003e\n* this DLL might be used: libeay.dll.\n  It only matters if there is a .mylogin.cnf file, which is rare.\n  If libeay.dll is not found on the system, .mylogin.cnf is ignored.\u003cbr\u003e\n* notice that the licence is slightly different from the Linux distribution,\n  because the MariaDB client library and the Qt library are statically linked\n  (in the Linux distribution they are dynamically linked and supplied separately).\u003cbr\u003e\n* the program does not always take over the screen at start time.\n   You have to look for an icon on the bottom and click it,\n   or check the task manager.\u003cbr\u003e\n* initial application load is very slow, although after that there are no known performance problems.\u003c/P\u003e\n\n\u003cH3 id=\"getting-and-using-the-ocelotgui-source\"\u003eAppendix 5 Getting and using the ocelotgui source\u003c/H3\u003e\u003cHR\u003e\n\n\u003cP\u003eTarantool is one of three DBMS servers that ocelotgui can connect to.\nThe others are MySQL and MariaDB.\n(That is why it is necessary to start ocelotgui with --ocelot_dbms=tarantool,\nso it knows what kind of server to look for.)\nThe instructions for connecting to\nthe other DBMS servers are in a different place.\nThe official location of the project is on github: \u003cA HREF=\"https://github.com/ocelot-inc/ocelotgui\"\u003ehttps://github.com/ocelot-inc/ocelotgui\u003c/A\u003e.\nThe instructions for building from source are in the README file\nof that location.\u003c/P\u003e\n\n\u003cP\u003eThere are some options which can be passed to cmake for\nignoring MySQL and MariaDB features during the build, which\nwill make the executable size slightly smaller and will make\nsome licensing restrictions unnecessary. For details, read\nCMakeLists.txt.\u003c/P\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focelot-inc%2Focelotgui-tarantool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Focelot-inc%2Focelotgui-tarantool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Focelot-inc%2Focelotgui-tarantool/lists"}