コード例 #1
0
ファイル: isql.c プロジェクト: capensis/canopsis-edc
/****************************
 * ExecuteSlash - meta commands
 ***************************/
static int
ExecuteSlash( SQLHDBC hDbc, char *szSQL, char cDelimiter, int bColumnNames, int bHTMLTable )
{
    SQLRETURN ret;

    szSQL ++;

    if ( memcmp( szSQL, "tables", 6 ) == 0 )
    {
        return display_tables( hDbc );
    }
    else if ( memcmp( szSQL, "columns", 7 ) == 0 )
    {
        return display_columns( hDbc, szSQL + 7 );
    }
    else if ( memcmp( szSQL, "ac", 2 ) == 0 )
    {
        if ( version3 )
        {
            ret = SQLSetConnectAttr( hDbc, SQL_ATTR_AUTOCOMMIT, 
                                     (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0 );

            if ( SQL_SUCCEEDED( ret ) )
            {
                ac_off = 0;
            }
        }
        else
        {
            ret = SQLSetConnectOption( hDbc, SQL_ATTR_AUTOCOMMIT, 
                                       SQL_AUTOCOMMIT_ON );

            if ( SQL_SUCCEEDED( ret ) )
            {
                ac_off = 0;
            }
        }

        if ( !bBatch )
        {
            printf( "AUTOCOMMIT ON (return status = %d)\n", ret );
        }

        if ( bVerbose && !SQL_SUCCEEDED( ret ))
        {
            DumpODBCLog( hEnv, hDbc, 0 );
        }
    }
    else if ( memcmp( szSQL, "noac", 4 ) == 0 )
    {
        if ( version3 )
        {
            ret = SQLSetConnectAttr( hDbc, SQL_ATTR_AUTOCOMMIT, 
                                     (SQLPOINTER)SQL_AUTOCOMMIT_OFF, 0 );

            if ( SQL_SUCCEEDED( ret ) )
            {
                ac_off = 1;
            }
        }
        else
        {
            ret = SQLSetConnectOption( hDbc, SQL_ATTR_AUTOCOMMIT, 
                                       SQL_AUTOCOMMIT_OFF );

            if ( SQL_SUCCEEDED( ret ) )
            {
                ac_off = 1;
            }
        }

        if ( !bBatch )
        {
            printf( "AUTOCOMMIT OFF (return status = %d)\n", ret );
        }

        if ( bVerbose && !SQL_SUCCEEDED( ret ))
        {
            DumpODBCLog( hEnv, hDbc, 0 );
        }
    }
    else if ( memcmp( szSQL, "commit", 6 ) == 0 )
    {
        if ( version3 )
        {
            ret = SQLEndTran( SQL_HANDLE_DBC, hDbc, SQL_COMMIT );
        }
        else
        {
            ret = SQLTransact( hEnv, hDbc, SQL_COMMIT );
        }

        if ( !bBatch )
        {
            printf( "COMMIT (return status = %d)\n", ret );
        }

        if ( bVerbose && !SQL_SUCCEEDED( ret ))
        {
            DumpODBCLog( hEnv, hDbc, 0 );
        }
    }
    else if ( memcmp( szSQL, "rollback", 8 ) == 0 )
    {
        if ( version3 )
        {
            ret = SQLEndTran( SQL_HANDLE_DBC, hDbc, SQL_ROLLBACK );
        }
        else
        {
            ret = SQLTransact( hEnv, hDbc, SQL_ROLLBACK );
        }

        if ( !bBatch )
        {
            printf( "ROLLBACK (return status = %d)\n", ret );
        }

        if ( bVerbose && !SQL_SUCCEEDED( ret ))
        {
            DumpODBCLog( hEnv, hDbc, 0 );
        }
    }
    else if ( memcmp( szSQL, "quit", 4 ) == 0 )
    {
        return 0;
    }
    else
    {
        printf( "\nUnknown metacommand '%s'\n\n", szSQL );
    }

    return 1;
}
コード例 #2
0
int main(int argc, char* argv[])
{
   //example usage:
   //dsv_filter_example <dsv file name>
   //dsv_filter_example <dsv file name> <input delimiter>
   //dsv_filter_example <dsv file name> <input delimiter> <output delimiter>

   std::string file_name        = "";
   std::string input_delimiter  = "|";
   std::string output_delimiter = "|";

   if (2 == argc)
   {
      file_name = argv[1];
   }
   else if (3 == argc)
   {
      file_name = argv[1];
      input_delimiter = argv[2];
   }
   else if (4 == argc)
   {
      file_name = argv[1];
      input_delimiter = argv[2];
      output_delimiter = argv[3];
   }

   dsv_filter filter;

   filter.set_input_delimiter(input_delimiter);
   filter.set_output_delimiter(output_delimiter);

   if (!file_name.empty())
   {
      if (filter.load(file_name))
         std::cout << "Successfully loaded " << filter.file_name() << "\n";
      else
      {
         std::cerr << "Error - Failed to load: " << file_name << std::endl;
         return 1;
      }
   }

   std::vector<bool> selected_column_list(filter.column_count(),true);

   std::deque<std::string> query_history;
   std::string query;

   for ( ; ; )
   {
      std::cout << "\nEnter query: ";
      std::getline(std::cin,query);

      strtk::remove_leading_trailing(" \t\n\r",query);

      if (query.empty())
         continue;
      else if (query_history.empty() || (query_history.back() != query))
      {
         query_history.push_back(query);
      }

      if (0 == strtk::ifind("exec",query))
      {
         if (!lookup_history(query_history,query))
            continue;
      }

      if (strtk::imatch(query,"exit") || strtk::imatch(query,"quit"))
         break;
      else if (strtk::imatch(query,"help"))
      {
         print_help();
         continue;
      }
      else if (strtk::imatch(query,"list"))
      {
         display_columns(filter);
         continue;
      }
      else if (0 == strtk::ifind("load",query))
      {
         load_dsv(query,filter);
         continue;
      }
      else if (strtk::imatch(query,"history"))
      {
         query_history.pop_back();
         display_history(query_history);
         continue;
      }
      else if (0 == strtk::ifind("output_delimiter",query))
      {
         set_output_delimiter(query,filter);
         continue;
      }
      else if (0 == strtk::ifind("input_delimiter",query))
      {
         set_input_delimiter(query,filter);
         continue;
      }
      else if ((0 == strtk::ifind("information",query)) || (0 == strtk::ifind("info",query)))
      {
         information(filter);
         continue;
      }

      selected_column_list.resize(filter.column_count(),true);
      std::fill_n(selected_column_list.begin(),selected_column_list.size(),true);

      bool count_mode = false;

      if(!parse_query(query,selected_column_list,count_mode,filter))
         continue;
      else if(filter.add_filter(query))
         generate_results(selected_column_list,filter,count_mode);
      else
      {
         std::cout << filter.error() << std::endl;
         continue;
      }
   }

   return 0;
}