Changeset 19103 for trunk/FACT++


Ignore:
Timestamp:
07/31/18 13:48:35 (6 years ago)
Author:
tbretz
Message:
Possibility to add the IGNORE keyword to the INSERT query.
Location:
trunk/FACT++/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/fits2sql.cc

    r19102 r19103  
    6666        ("engine",         var<string>("InnoDB"),     "Database engine to be used when a new table is created")
    6767        ("duplicate",      var<string>(""),           "Specifies an assignment_list for an 'ON DUPLICATE KEY UPDATE' expression")
     68        ("ignore-errors",  po_switch(),               "Adds the IGNORE keyword to the INSERT query (turns errors into warnings, ignores rows with errors)")
    6869        ;
    6970
     
    153154        "with the identical primary key, e.g. --duplicate='MyPrimary=VALUES(MyPrimary)'. "
    154155        "For more details, see the MySQL manual.\n"
     156        "\n"
     157        "Another possibility is to add the IGNORE keyword to the INSERT query by "
     158        "--ignore-errors, which essentially ignores all errors and turns them into "
     159        "warnings which are printed after the query succeeded.\n"
    155160        "\n"
    156161        "For debugging purpose, or to just create or drop a table, the final insert "
     
    278283    const string duplicate       = conf.Get<string>("duplicate");
    279284
     285    const bool ignore_errors     = conf.Get<bool>("ignore-errors");
     286
    280287    const bool print_extensions  = conf.Get<bool>("print-extensions");
    281288    const bool print_columns     = conf.Get<bool>("print-columns");
     
    312319    {
    313320        cout << "\nTables:\n - " << boost::join(f.GetTables(), "\n - ") << '\n' << endl;
    314         return 2;
     321        return 3;
    315322    }
    316323
     
    429436    // Checking for database connection
    430437
     438    Database connection(uri);
     439
    431440    try
    432441    {
    433442        if (!force)
    434             Database(uri).connected();
     443            connection.connected();
    435444    }
    436445    catch (const exception &e)
    437446    {
    438447        cerr << "SQL connection failed: " << e.what() << endl;
    439         return 3;
     448        return 4;
    440449    }
    441450
     
    463472            // => Simple result
    464473            if (!dry_run)
    465                 Database(uri).query("DROP TABLE `"+table+"`").execute();
     474                connection.query("DROP TABLE `"+table+"`").execute();
    466475            if (verbose>0)
    467476                cout << "Table `" << table << "` dropped." << endl;
     
    472481        cerr << "DROP TABLE `" << table << "`\n\n";
    473482        cerr << "SQL query failed:\n" << e.what() << endl;
    474         return 4;
     483        return 5;
    475484    }
    476485
     
    478487    {
    479488        if (create && !dry_run)
    480             Database(uri).query(query).execute();
     489            connection.query(query).execute();
    481490    }
    482491    catch (const exception &e)
     
    484493        cerr << query << "\n\n";
    485494        cerr << "SQL query failed:\n" << e.what() << endl;
    486         return 5;
     495        return 6;
    487496    }
    488497
     
    499508
    500509    //query = update ? "UPDATE" : "INSERT";
    501     query = "INSERT `"+table+"`\n"
     510    query = "INSERT ";
     511    if (ignore_errors)
     512        query += "IGNORE ";
     513    query += "`"+table+"`\n"
    502514        "(\n";
    503515
     
    580592        if (!noinsert && !dry_run)
    581593            // => Simple result
    582             Database(uri).query(query).execute();
     594            connection.query(query).execute();
    583595        else
    584596            cout << "Insert query skipped!" << endl;
     
    592604            cerr << query << "\n\n";
    593605        cerr << "SQL query failed (" << query.length() << " bytes):\n" << e.what() << endl;
    594         return 6;
     606        return 7;
    595607    }
    596608
     
    599611        cout << count << " row(s) inserted.\n\n";
    600612        cout << "Total execution time: " << Time().UnixTime()-start.UnixTime() << "s\n" << endl;
    601 /*
     613
    602614        try
    603615        {
     
    613625
    614626                cout << roww["Level"] << '[' << roww["Code"] << "]: ";
    615                 cout << roww["Message"] << '\n' << endl;
     627                cout << roww["Message"] << '\n';
    616628            }
     629            cout << endl;
    617630
    618631        }
     
    621634            cerr << "\nSHOW WARNINGS\n\n";
    622635            cerr << "SQL query failed:\n" << e.what() << endl;
    623             return 6;
    624         }*/
     636            return 8;
     637        }
    625638    }
    626639
  • trunk/FACT++/src/root2sql.cc

    r19102 r19103  
    6262        ("engine",         var<string>("InnoDB"),     "Database engine to be used when a new table is created")
    6363        ("duplicate",      var<string>(""),           "Specifies an assignment_list for an 'ON DUPLICATE KEY UPDATE' expression")
     64        ("ignore-errors",  po_switch(),               "Adds the IGNORE keyword to the INSERT query (turns errors into warnings, ignores rows with errors)")
    6465        ;
    6566
     
    159160        "end.\n"
    160161        "\n"
     162        "Another possibility is to add the IGNORE keyword to the INSERT query by "
     163        "--ignore-errors, which essentially ignores all errors and turns them into "
     164        "warnings which are printed after the query succeeded.\n"
     165        "\n"
    161166        "Using a higher verbosity level (-v), an overview of the written columns or all "
    162167        "processed leaves is printed depending on the verbosity level. The output looks "
     
    301306    const string duplicate       = conf.Get<string>("duplicate");
    302307
     308    const bool ignore_errors     = conf.Get<bool>("ignore-errors");
     309
    303310    const bool print_branches    = conf.Get<bool>("print-branches");
    304311    const bool print_leaves      = conf.Get<bool>("print-leaves");
     
    452459    // Checking for database connection
    453460
     461    Database connection(uri);
     462
    454463    try
    455464    {
    456465        if (!force)
    457             Database(uri).connected();
     466            connection.connected();
    458467    }
    459468    catch (const exception &e)
     
    485494            // => Simple result
    486495            if (!dry_run)
    487                 Database(uri).query("DROP TABLE `"+table+"`").execute();
     496                connection.query("DROP TABLE `"+table+"`").execute();
    488497            if (verbose>0)
    489498                cout << "Table `" << table << "` dropped." << endl;
     
    500509    {
    501510        if (create && !dry_run)
    502             Database(uri).query(query).execute();
     511            connection.query(query).execute();
    503512    }
    504513    catch (const exception &e)
     
    521530
    522531    //query = update ? "UPDATE" : "INSERT";
    523     query = "INSERT `"+table+"`\n"
     532    query = "INSERT ";
     533    if (ignore_errors)
     534        query += "IGNORE ";
     535    query += "`"+table+"`\n"
    524536        "(\n";
    525537
     
    589601        if (!noinsert && !dry_run)
    590602            // => Simple result
    591             Database(uri).query(query).execute();
     603            connection.query(query).execute();
    592604        else
    593605            cout << "Insert query skipped!" << endl;
     
    608620        cout << count << " row(s) inserted.\n\n";
    609621        cout << "Total execution time: " << Time().UnixTime()-start.UnixTime() << "s\n" << endl;
    610 /*
     622
    611623        try
    612624        {
     
    622634
    623635                cout << roww["Level"] << '[' << roww["Code"] << "]: ";
    624                 cout << roww["Message"] << '\n' << endl;
     636                cout << roww["Message"] << '\n';
    625637            }
     638            cout << endl;
    626639
    627640        }
     
    630643            cerr << "\nSHOW WARNINGS\n\n";
    631644            cerr << "SQL query failed:\n" << e.what() << endl;
    632             return 6;
    633         }*/
    634     }
    635 
     645            return 7;
     646        }
     647    }
    636648
    637649    return 0;
Note: See TracChangeset for help on using the changeset viewer.