MYM - Interact with a MySQL database server Copyright 2005, EPFL (Yannick Maret) Copyright notice: this code is a heavily modified version of the original work of Robert Almgren from University of Toronto. If no output arguments are given, then display results. Otherwise returns requested data silently. mym() or mym ------------ shows status of all open connections (returns nothing). mym('open', host, user, password) --------------------------------- Open a connection with specified parameters, or defaults if none host: default is local host. Use colon for port number user: default is Unix login name. password: default says connect without password. Examples: mym('open','arkiv') % connect on default port mym('open','arkiv:2215') If successful, open returns 0 if successful, and throw an error otherwise. The program can maintain up to 20 independent connections. Any command may be preceded by a connection handle -- an integer from 0 to 10 -- to apply the command to that connection. Examples: mym(5,'open','host2') % connection 5 to host 2 mym % status of all connections When no connection handle is given, mym will use 0 by default. If the corresponding connection is open, it is closed and opened again. It is possible to give to ask mym to look for an available connection handle by using -1 instead of a valid connection handle. The used connection handle is then returned. Example: cid = mym(-1, 'open', 'host2') % cid contains the used connection handle mym('close') ------------ Close the current connection. Use mym('closeall') to closes all open connections. mym('use',db) or mym('use db') --------------------------------- Set the current database to db Example: mym('use cme') mym('status') ------------- Display information about the connection and the server. Return 0 if connection is open and functioning 1 if connection is closed 2 if should be open but we cannot ping the server mym(query) ---------- Send the given query or command to the MySQL server. If arguments are given on the left, then each argument is set to the column of the returned query. Dates and times in result are converted to Matlab format: dates are serial day number, and times are fraction of day. String variables are returned as cell arrays. Example: p = mym('select price from contract where date="1997-04-30"'); % Returns price for contract that occured on April 30, 1997. Note: All string comparisons are case-insensitive Placeholders: in a query the following placeholders can be used: {S}, {Si}, {M}, {F}, and {B}. Example: i = 1000; B = [1 2; 3 4]; mym('INSERT INTO test(id,value) VALUES("{Si}","{M}")',i,B); A = mym('SELECT value FROM test WHERE id ="{Si}")', 1000); % Insert the array B into table test with id=1000. Then the % value is retrieved and put into A. {S} is remplaced by a string given by the corresponding argument arg. Arg can be a matlab string or a scalar. The format of the string for double scalars is [sign]d.ddddddEddd; for integers the format is [sign]dddddd. {Sn} is the same as {S} but for double scalar only. The format of the string is [sign]d.ddddEddd, where the number of decimal after the dot is given by n. {Si} is the same as {S} but for double scalar only. The corresponding double is first converted to an integer (using floor). {M} is replaced by the binary representation of the corresponding argument (it can be a scalar, cell, numeric or cell array, or a structure). {B} is replaced by the binary representation of the uint8 vector given in the corresponding argument. {F} is the same as {B} but for the file whose name is given in the corresponding argument. Note: 1) {M}, {B} and {F} need to be put in fields of type BLOB 2) {M}, {B} and {F} binary representations are compressed -- only if the space gain is larger than 10% --. We use zlib v1.2.3! The compression can be switched off by using {uM}, {uB} and {uF}, instead. 3) {M} does *not* work if the endian configuration of the client used to store it is different than that used to retrieve it. 4) time fields are returned as string dump 5) this kind of insert does not work properly: mym(INSERT INTO tbl(id,txt) VALUES(1000,"abc{dfg}h")'); as the "abc{dfg}h" is mistaken for a mYm command. A possible solution is to use the following command: mym(INSERT INTO tbl(id,txt) VALUES(1000,"{S}")','abc{dfg}h'); Copyright 2010 Julio Trevisan, Plamen P. Angelov & Francis L. Martin. e-mailing author: j.trevisan@lancaster.ac.uk This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. A copy of the GNU General Public License is shipped along with this program (filename: "COPYING"). For an online version of the license, see <http://www.gnu.org/licenses/>.