48int main(
int argc,
char *argv[])
53 int verbose_level = 1;
54 std::string connect_string;
55 std::string working_schema;
59 int schema_version = -1;
60 bool remove_file =
false;
62 for(
int i = 1; i < argc; i++) {
63 const char * cp = argv[i];
65 if(!strcmp(cp,
"-h") || !strcmp(cp,
"--help")) {
67 return (EXIT_SUCCESS);
69 else if(!strcmp(cp,
"-v") || !strcmp(cp,
"--verbose-level")) {
70 if(++i == argc) {
no_param(cp);
return (EXIT_FAILURE); }
else { verbose_level = atoi(argv[i]); }
72 else if(!strcmp(cp,
"-n") || !strcmp(cp,
"--schema-version")) {
73 if(++i == argc) {
no_param(cp);
return (EXIT_FAILURE); }
else { schema_version = atoi(argv[i]); }
75 else if(!strcmp(cp,
"-e") || !strcmp(cp,
"--head-schema-version")) {
77 if(argc > (i+1) && argv[i+1][0] !=
'-') {++i; release = argv[i]; }
79 else if(!strcmp(cp,
"-c") || !strcmp(cp,
"--connect-string")) {
80 if(++i == argc) {
no_param(cp);
return (EXIT_FAILURE); }
else { connect_string = argv[i]; }
82 else if(!strcmp(cp,
"-w") || !strcmp(cp,
"--working-schema")) {
83 if(++i == argc) {
no_param(cp);
return (EXIT_FAILURE); }
else { working_schema = argv[i]; }
85 else if(!strcmp(cp,
"-f") || !strcmp(cp,
"--out-file")) {
86 if(++i == argc) {
no_param(cp);
return (EXIT_FAILURE); }
else { file = argv[i]; }
89 std::cerr <<
"ERROR: Unexpected parameter: \"" << cp <<
"\"\n\n";
91 return (EXIT_FAILURE);
95 if(schema_version == -1) {
96 std::cerr <<
"ERROR: specify schema version or use -e parameter to get HEAD schema version\n";
101 if(connect_string.empty()) {
102 std::cerr <<
"ERROR: the connect string is required\n";
107 if(working_schema.empty()) {
108 std::cerr <<
"ERROR: the working schema is required\n";
125 file = kernel.get_tmp_file(
"/tmp/unknown.schema.xml");
126 VerboseMsg2(
"The name of output schema file was not provided.\n * use file \'" << file <<
'\'');
131 ::OksFile * fh = kernel.new_schema(file);
135 std::unique_ptr<coral::ConnectionService> connection;
139 if(schema_version == 0) {
141 if(schema_version < 0) {
142 throw std::runtime_error( (schema_version == 0) ?
"Cannot get head schema" :
"Cannot get given schema" );
151 session->transaction().commit();
160 VerboseMsg2(
"Removing temporal schema file \'" << file <<
"\'...");
161 unlink(file.c_str());
165 kernel.save_schema(fh);
172 catch ( coral::Exception& e ) {
173 std::cerr <<
"CORAL exception: " << e.what() << std::endl;
177 catch ( oks::exception & ex) {
178 std::cerr <<
"OKS exception:\n" << ex << std::endl;
182 catch ( std::exception& e ) {
183 std::cerr <<
"Standard C++ exception : " << e.what() << std::endl;
188 std::cerr <<
"Exception caught (...)" << std::endl;
void get_schema(OksKernel &kernel, coral::ISessionProxy *session, const std::string &schema, int version, bool read_methods, int verbose_level)
Get schema by version number.
coral::ISessionProxy * start_coral_session(const std::string &connect_string, int mode, std::unique_ptr< coral::ConnectionService > &connection, int verbose_level)
Start coral session.
int get_head_schema_version(coral::ISessionProxy *session, const std::string &schema, const char *release=0, int verbose_level=1, const char *dx="")
Get HEAD schema version number.