0001 function [AOids, Cid] = submit_fastinsert(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 if nargin == 2
0029 if isa(varargin{1}, 'ao') && ischar(varargin{2})
0030 in = char(varargin{2});
0031 if strcmp(in, 'Params')
0032 AOids = getDefaultPL();
0033 return
0034 end
0035 end
0036 end
0037
0038
0039
0040 as = [];
0041 comment = [];
0042 for j=1:nargin
0043 a = varargin{j};
0044 if isa(a, 'ao')
0045 as = [as a];
0046 end
0047 if ischar(a)
0048 comment = varargin{j};
0049 end
0050 end
0051 na = length(as);
0052 if na < 1
0053 error('### Incorrect inputs: please supply at least one AO to submit.');
0054 end
0055 if isempty(comment) || length(comment)<10
0056 error('### Incorrect inputs: please supply a comment of at least 10 characters in length.');
0057 end
0058 disp(sprintf('** Submitting %d AOs.', na));
0059
0060
0061
0062
0063 conn = mysql_connect();
0064
0065
0066
0067
0068 AOids = [];
0069 Cid = -1;
0070
0071 for j=1:na
0072
0073 a = as(j);
0074
0075 a = tag(a, conn);
0076
0077 disp(sprintf('** Submitting AO: %06d/%s', a.tag, a.name));
0078
0079
0080 [userid, dbuser] = mysql_getUserID(conn);
0081 disp(sprintf('** submitting as user %s/%d', dbuser, userid));
0082
0083
0084 name = a.name;
0085 data = a.data;
0086 dinfo = whos('data');
0087 dtype = dinfo.class;
0088 dname = data.name;
0089 submitted = ltpda_reformat_date(datestr(now, 31));
0090 prov = a.provenance;
0091
0092 created = format(get(prov, 'created'), 'mm-dd-yyyy HH:MM:SS');
0093 ip = get(prov, 'ip');
0094 hostname = get(prov, 'hostname');
0095 os = get(prov, 'os');
0096 filename = sprintf('AO%06d.xml', a.tag);
0097
0098
0099 x = xml(a);
0100 atxt = xmlwrite(x.docNode);
0101
0102
0103 colnames = {'name','dtype','dname','ndata',...
0104 'UserID','Comment1','Creation',...
0105 'IP','Hostname','OS','Filename'};
0106 exdata = {name,dtype,dname,len(a),...
0107 userid,comment,created,...
0108 ip,hostname,os,filename};
0109
0110 fastinsert(conn, 'aos', colnames, exdata);
0111
0112 colnames = {'AO'};
0113 exdata = {atxt};
0114 insert(conn, 'aofiles', colnames, exdata);
0115
0116
0117
0118 colnames = {'aoid','UserId','Tdate','Direction'};
0119 exdata = {a.tag,userid,submitted,'in'};
0120 try
0121 fastinsert(conn, 'transactions', colnames, exdata);
0122 catch
0123 warning('### error updating transaction table for submission of AO %s/%d', a.name, a.tag);
0124 end
0125
0126
0127 AOids = [AOids a.tag];
0128
0129 end
0130
0131
0132 colnames = {'num','aoids'};
0133 exdata = {length(AOids),csv(AOids)};
0134 if ~isempty(AOids)
0135 try
0136 fastinsert(conn, 'collections', colnames, exdata);
0137
0138 curs = exec(conn, 'select max(id) from collections');
0139 curs = fetch(curs);
0140 Cid = curs.Data{1};
0141 close(curs);
0142 catch
0143 warning('### error submitting AO collection.');
0144 end
0145 end
0146
0147
0148
0149
0150
0151 close(conn);
0152
0153
0154
0155 function s = csv(x)
0156
0157 s = sprintf('%g,', x);
0158 s = s(1:end-1);
0159
0160
0161
0162 function plo = getDefaultPL()
0163
0164 disp('* creating default plist...');
0165 plo = plist();
0166 disp('* done.');
0167
0168
0169
0170
0171 function message = minsert(conn, table, varargin)
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191 q = sprintf('INSERT INTO %s(', table);
0192 for j=1:2:length(varargin)
0193 q = [q varargin{j} ','];
0194 end
0195 q = q(1:end-1);
0196
0197 q = [q ') VALUES('];
0198
0199 for j=2:2:length(varargin)
0200 val = varargin{j};
0201 if ischar(val)
0202 q = [q '''' val '''' ','];
0203 elseif isnumeric(val)
0204 q = [q mat2str(val) ','];
0205 else
0206 error('unknown data type');
0207 end
0208
0209 end
0210
0211 q = q(1:end-1);
0212 q = [q ');'];
0213
0214 curs = exec(conn, q);
0215 message = curs.Message;
0216 disp(message);
0217 close(curs);
0218
0219
0220