273{
274 Writer& out =
args().output();
276
279 "SELECT COALESCE(MAX(DIR_ID), 1000) FROM STOR_DIR"
280 ;
283 q.fetch();
284 __dirId = q.fields()[0].asInt32();
285 }
286
289 "SELECT COALESCE(MAX(FILE_ID), 10000) FROM STOR_FILE"
290 ;
293 q.fetch();
295 }
296
300
302 "INSERT INTO STOR_DIR (DIR_ID, PATH, CREA_TS, MODI_TS)"
303 "\n VALUES(:DIR_ID, :PATH, CURRENT_TIMESTAMP_(), CURRENT_TIMESTAMP_())"
304 ;
307 q.params()[0].setValue(
__dirId);
309 q.execute();
310
311 out << L
" INSERT STOR_DIR [" <<
__dirId << L
"]["
313 }
314
316
318 "INSERT INTO STOR_FILE ("
319 "FILE_ID, NAME, USER_ID, STOR_ID, TYPE_ID"
320 ", DIR_ID, FILE_NM, FILE_SZ, FILE_AT, FILE_MT, FILE_CT, FILE_ER"
321 ", MEDI_FM, MEDI_WI, MEDI_HE, MEDI_DU, MEDI_NF"
322 ", READ_CO, CREA_TS, MODI_TS"
323 ")"
324 "\nVALUES ("
325 ":FILE_ID, :NAME, 0, 0, 0"
326 ", :DIR_ID, :FILE_NM, :FILE_SZ, :FILE_AT, :FILE_MT, :FILE_CT, :FILE_ER"
327 ", :MEDI_FM, :MEDI_WI, :MEDI_HE, :MEDI_DU, :MEDI_NF"
328 ", 0, CURRENT_TIMESTAMP_(), CURRENT_TIMESTAMP_()"
329 ")";
332 q.params().byName(L
"FILE_ID").setValue(
__fileId);
333 q.params().byName(L"NAME").setValue(_info.filename);
334 q.params().byName(L
"DIR_ID").setValue(
__dirId);
335 q.params().byName(L"FILE_NM").setValue(_info.filename);
336 q.params().byName(L"FILE_SZ").setValue(_info.size);
337 q.params().byName(L"FILE_AT").setValue(_info.atime);
338 q.params().byName(L"FILE_MT").setValue(_info.mtime);
339 q.params().byName(L"FILE_CT").setValue(_info.ctime);
340 q.params().byName(L"FILE_ER").setValue(_info.notes);
341 q.params().byName(L"MEDI_FM").setValue(_info.format);
342 q.params().byName(L"MEDI_WI").setValue(_info.width);
343 q.params().byName(L"MEDI_HE").setValue(_info.height);
344 q.params().byName(L"MEDI_DU").setValue(_info.duration);
345 q.params().byName(L"MEDI_NF").setValue(_info.inform);
346 q.execute();
347
348 out << L
" INSERT STOR_FILE [" <<
__fileId << L
"]["
349 << _info.filename << L
"]" <<
endl;
350
351 if (_info.id3v1.version() > 0) {
352 if (_info.id3v1.title().length() > 0) {
354 "INSERT INTO ID3V1 ("
355 "FILE_ID, TITLE, ARTIST, ALBUM, YEAR_"
356 ", COMMENT_, TRACK, GENRE"
357 ")"
358 "\nVALUES ("
359 ":FILE_ID, :TITLE, :ARTIST, :ALBUM, :YEAR_"
360 ", :COMMENT_, :TRACK, :GENRE"
361 ")";
364 q.params().byName(L
"FILE_ID").setValue(
__fileId);
365 q.params().byName(L"TITLE").setValue(_info.id3v1.title());
366
367 if (_info.id3v1.artist().isEmpty())
368 q.params().byName(L"ARTIST").setNull();
369 else
370 q.params().byName(L"ARTIST").setValue(_info.id3v1.artist());
371
372 if (_info.id3v1.album().isEmpty())
373 q.params().byName(L"ALBUM").setNull();
374 else
375 q.params().byName(L"ALBUM").setValue(_info.id3v1.album());
376
377 if (_info.id3v1.year().isEmpty())
378 q.params().byName(L"YEAR_").setNull();
379 else
380 q.params().byName(L"YEAR_").setValue(_info.id3v1.year());
381
382 if (_info.id3v1.comment().isEmpty())
383 q.params().byName(L"COMMENT_").setNull();
384 else
385 q.params().byName(L"COMMENT_").setValue(_info.id3v1.comment());
386
387 q.params().byName(L"TRACK").setValue(_info.id3v1.track());
388 q.params().byName(L"GENRE").setValue(_info.id3v1.genre());
389 q.execute();
390
392 out << L
" INSERT ID3V1" <<
endl;
393 }
394 }
395 else {
396 args().errout() << L
"Title is NULL "
398 << L
" [" << _info.dirname << _info.filename << L
"]" <<
endl;
399 }
400 }
401
402 if (_info.id3v2.version() > 0) {
404 "INSERT INTO ID3V2 ("
405 "FILE_ID, VERSION, FLAGS, SIZE_, FSBITS"
406 ")"
407 "\nVALUES ("
408 ":FILE_ID, :VERSION, :FLAGS, :SIZE_, :FSBITS"
409 ")";
412 q.params().byName(L
"FILE_ID").setValue(
__fileId);
413 q.params().byName(L"VERSION").setValue(_info.id3v2.version());
414 q.params().byName(L"FLAGS").setValue(_info.id3v2.flags());
415 q.params().byName(L"SIZE_").setValue(_info.id3v2.size());
416 q.params().byName(L"FSBITS").setValue(_info.id3v2.fsbits());
417 q.execute();
418
420 "INSERT INTO ID3V2_FRAME ("
421 "FILE_ID, NO_, FRAME_ID, SIZE_, FLAGS"
422 ", ENCODING, TYPE_, URL, DESCRIPTION, TEXT_, BINARY_"
423 ")"
424 "\nVALUES ("
425 ":FILE_ID, :NO_, :FRAME_ID, :SIZE_, :FLAGS"
426 ", :ENCODING, :TYPE_, :URL, :DESCRIPTION, :TEXT_, :BINARY_"
427 ")";
429 for (size_t i = 0; i < _info.id3v2.frames().size(); i++) {
430 ID3v2Frame& frame = *(ID3v2Frame*)_info.id3v2.frames()[i];
431 q.params().byName(L
"FILE_ID").setValue(
__fileId);
432 q.params().byName(L"NO_").setValue((int)(i + 1));
433 q.params().byName(L
"FRAME_ID").setValue(frame.
id());
434 q.params().byName(L
"SIZE_").setValue(frame.
size());
435 q.params().byName(L
"FLAGS").setValue(frame.
flags());
436 q.params().byName(L
"ENCODING").setValue(frame.
encoding());
437 q.params().byName(L
"TYPE_").setValue(frame.
type());
438
439 if (frame.
url().isEmpty())
440 q.params().byName(L"URL").setNull();
441 else
442 q.params().byName(L
"URL").setValue(frame.
url());
443
445 q.params().byName(L"DESCRIPTION").setNull();
446 else
447 q.params().byName(L
"DESCRIPTION").setValue(frame.
description());
448
449 if (frame.
text().isEmpty())
450 q.params().byName(L"TEXT_").setNull();
451 else
452 q.params().byName(L
"TEXT_").setValue(frame.
text());
453
454 if (frame.
binary().length() == 0 || 100 < frame.
binary().length())
455
456 q.params().byName(L"BINARY_").setNull();
457 else
458 q.params().byName(L
"BINARY_").setValue(frame.
binary());
459
460 q.execute();
461 }
462
464 out << L" INSERT ID3V2 ID3V2_FRAME["
465 << _info.id3v2.frames().size() << L
"]" <<
endl;
466 }
467 }
468
469 if (_info.apev2.version() > 0) {
471 "INSERT INTO APE ("
472 "FILE_ID, VERSION, SIZE_, COUNT_, FLAGS"
473 ")"
474 "\nVALUES ("
475 ":FILE_ID, :VERSION, :SIZE_, :COUNT_, :FLAGS"
476 ")";
479 q.params().byName(L
"FILE_ID").setValue(
__fileId);
480 q.params().byName(L"VERSION").setValue(_info.apev2.version());
481 q.params().byName(L"SIZE_").setValue(_info.apev2.size());
482 q.params().byName(L"COUNT_").setValue(_info.apev2.count());
483 q.params().byName(L"FLAGS").setValue(_info.apev2.flags());
484 q.execute();
485
487 "INSERT INTO APE_ITEM ("
488 "FILE_ID, NO_, SIZE_, FLAGS"
489 ", KEY_, VALUE_"
490 ")"
491 "\nVALUES ("
492 ":FILE_ID, :NO_, :SIZE_, :FLAGS"
493 ", :KEY_, :VALUE_"
494 ")";
496 for (size_t i = 0; i < _info.apev2.items().size(); i++) {
497 APEv2Item& item = *(APEv2Item*)_info.apev2.items()[i];
498 q.params().byName(L
"FILE_ID").setValue(
__fileId);
499 q.params().byName(L"NO_").setValue((int)(i + 1));
500 q.params().byName(L"SIZE_").setValue(item.size());
501 q.params().byName(L"FLAGS").setValue(item.flags());
502 q.params().byName(L"KEY_").setValue(item.key());
503
504 if (item.value().isEmpty())
505 q.params().byName(L"VALUE_").setNull();
506 else
507 q.params().byName(L"VALUE_").setValue(item.value());
508
509 q.execute();
510 }
511
513 out << L" INSERT APE APE_ITEM["
514 << _info.apev2.items().size() << L
"]" <<
endl;
515 }
516 }
517}
const String & url() const
const String & description() const
const String & text() const
const ByteString & binary() const
virtual String toString() const
const MainArguments & args() const