Mym
From Bcontrol
% 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 use 0 by default. If the
% corresponding connection is open, it is closed and opened again.
% It is possible to ask mym to look for an available connection
% handle by using -1. 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 of the client used to store
% the BLOB is different than that used to fetch 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');