Beispiel #1
0
/**
 * @brief server querying function, which querys the server and get a
 * list of boards from the server. Then we iterate over the list and
 * print out the clients and lines attached to the boards.
 * @param snm server name to query. 
 * @param prgn program number for the server. 
 * @param clp client pointer, which indicates we need to create a new
 * client to the server before doing the querying thing. 
 * @return number of boards on the given server with progn.
 */
int queryServer(char * snm, int prgn, CLIENT * clp)
{
  int dummy = 0;
  int ccnt = 0, bcnt = 0 ;
  BBoardp b, * bp = query_1(&dummy, clp);
  if (!bp) {
    printf("Server has no boards.\n");
    return 0; 
  }
  // no boards returned from the server.
  fprintf(stdout, "\nQuery Results: \n"); 
  for (b = *bp; b; b = b->next) {
    printf("Board %s on server %s prognum %x has\n",
    	   b->clients->clientdata.boardnm, snm, prgn);

    // print clients information for the current board.
    struct BClient * clnt = b->clients;
    while(clnt) {
      printf("\tclient on server %s displayed at %s with prognum %x\n",
	     clnt->clientdata.machinenm, clnt->clientdata.xdisplaynm,
	     clnt->clientdata.nprogram);

      ccnt++; 
      clnt = clnt -> next; 
    }

    // print the lines in this board.
    struct ALine * lnp = b -> lines; 
    while(lnp) {
      fprintf(stdout, "Line: (%d, %d) to (%d, %d), color 0x%x.\n", 
	      lnp->ln.x1, lnp->ln.y1, lnp->ln.x2, lnp->ln.y2, lnp->ln.color); 
      lnp = lnp -> next;
    }
    bcnt++;
  } // for, loop around the board list. 

  // print results.
  fprintf(stdout, "\nTotal Boards: %d, total clients %d.\n\n", bcnt, ccnt);
  return bcnt; 
}
Beispiel #2
0
QVector<SpiceInfoData> SpiceInfo::querySpice(const QString &name)
{
    QVector<SpiceInfoData> vecSpiceInfo;

    QSqlDatabase db;
    if(!createConnection(db))
    {
        // 连接使用完后需要释放回数据库连接池
        ConnectionPool::closeConnection(db);
        return vecSpiceInfo;
    }

    QSqlQuery query(db);
    //spice_information
    query.prepare("SELECT id, englishName, chineseName, typeId, property, sense, extract, origin, purpose, imagePath, FEMA, FDA, COE, GB, density, refractive, solubility FROM spice_information "
                  "WHERE chineseName like :chineseName OR englishName like :englishName");
    query.bindValue(":chineseName", "%" + name + "%");
    query.bindValue(":englishName", "%" + name + "%");
    if(!query.exec())
    {
        qDebug() << __FILE__ << __LINE__ << query.lastError().text();
    }

    while(query.next())
    {

        SpiceInfoData spiceInfo;
        spiceInfo.id = query.value(0).toInt();
        spiceInfo.name.EnList = query.value(1).toString().split(';');
        spiceInfo.name.CnList = query.value(2).toString().split(';');
        spiceInfo.type = query.value(3).toInt();
        spiceInfo.property = query.value(4).toString();
        spiceInfo.sense = query.value(5).toString();
        spiceInfo.extract = query.value(6).toString();
        spiceInfo.origin = query.value(7).toString();
        spiceInfo.purpose = query.value(8).toString();
        spiceInfo.imagePath = query.value(9).toString();
        spiceInfo.management.FEMA = query.value(10).toString();
        spiceInfo.management.FDA = query.value(11).toString();
        spiceInfo.management.COE = query.value(12).toString();
        spiceInfo.management.GB = query.value(13).toString();
        spiceInfo.physics.density = query.value(14).toString();
        spiceInfo.physics.refractive = query.value(15).toString();
        spiceInfo.physics.solubility = query.value(16).toString();

        //spice_content
        QSqlQuery query_content(db);
        query_content.prepare("SELECT retentionTime, absoluteValue, relativeValue, contentId FROM spice_content "
                              "WHERE spiceId=:id");
        query_content.bindValue(":id", spiceInfo.id);
        if(!query_content.exec())
        {
            qDebug() << __FILE__ << __LINE__ << query_content.lastError().text();
        }

        SpiceContent content;
        while(query_content.next())
        {
            content.retentionTime = query_content.value(0).toDouble();
            content.absoluteContent = query_content.value(1).toDouble();
            content.relativeContent = query_content.value(2).toDouble();
            int contentId = query_content.value(3).toInt();
            QSqlQuery query_1(db);
            query_1.prepare("SELECT chineseName, englishName FROM content WHERE id=:id");
            query_1.bindValue(":id",contentId);
            if(query_1.exec())
            {
                if(query_1.next())
                {
                    content.chineseName = query_1.value(0).toString();
                    content.englishName = query_1.value(1).toString();

                    spiceInfo.vecContent.push_back(content);
                }
            }
            else
            {
                qDebug() << __FILE__ << __LINE__ << query_1.lastError().text();
            }
        }
        vecSpiceInfo.push_back(spiceInfo);
    }
    // 连接使用完后需要释放回数据库连接池
    ConnectionPool::closeConnection(db);

    return vecSpiceInfo;
}
Beispiel #3
0
TEST_F(InsertSQLTests, InsertIntoSelectColumn) {
  auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
  auto txn = txn_manager.BeginTransaction();
  catalog::Catalog::GetInstance()->CreateDatabase(txn, DEFAULT_DB_NAME);
  txn_manager.CommitTransaction(txn);

  CreateAndLoadTable6();
  CreateAndLoadTable7();

  std::vector<ResultValue> result;
  std::vector<FieldInfo> tuple_descriptor;
  std::string error_message;
  int rows_changed;
  std::unique_ptr<optimizer::AbstractOptimizer> optimizer(
      new optimizer::Optimizer());

  // TEST CASE 1
  std::string query_1("INSERT INTO test6 SELECT b,a,c FROM test7;");

  txn = txn_manager.BeginTransaction();
  auto plan =
      TestingSQLUtil::GeneratePlanWithOptimizer(optimizer, query_1, txn);
  txn_manager.CommitTransaction(txn);
  EXPECT_EQ(plan->GetPlanNodeType(), PlanNodeType::INSERT);

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(optimizer, query_1, result,
                                               tuple_descriptor, rows_changed,
                                               error_message);

  EXPECT_EQ(4, rows_changed);

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(
      optimizer, "SELECT * FROM test6 WHERE a=8", result, tuple_descriptor,
      rows_changed, error_message);
  EXPECT_EQ(3, result.size());
  EXPECT_EQ("8", TestingSQLUtil::GetResultValueAsString(result, 0));
  EXPECT_EQ("55", TestingSQLUtil::GetResultValueAsString(result, 1));
  EXPECT_EQ("999", TestingSQLUtil::GetResultValueAsString(result, 2));

  // TEST CASE 2
  std::string query_2("INSERT INTO test7 SELECT * FROM test6 WHERE a=1;");
  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(optimizer, query_2, result,
                                               tuple_descriptor, rows_changed,
                                               error_message);
  EXPECT_EQ(1, rows_changed);

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(
      optimizer, "SELECT * FROM test7 WHERE a=1", result, tuple_descriptor,
      rows_changed, error_message);
  EXPECT_EQ(3, result.size());
  EXPECT_EQ("1", TestingSQLUtil::GetResultValueAsString(result, 0));
  EXPECT_EQ("22", TestingSQLUtil::GetResultValueAsString(result, 1));
  EXPECT_EQ("333", TestingSQLUtil::GetResultValueAsString(result, 2));

  // TEST CASE 3
  std::string query_3("INSERT INTO test7 SELECT b,a,c FROM test6 WHERE a=2;");
  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(optimizer, query_3, result,
                                               tuple_descriptor, rows_changed,
                                               error_message);
  EXPECT_EQ(1, rows_changed);

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(
      optimizer, "SELECT * FROM test7 WHERE a=11", result, tuple_descriptor,
      rows_changed, error_message);
  EXPECT_EQ(3, result.size());
  EXPECT_EQ("11", TestingSQLUtil::GetResultValueAsString(result, 0));
  EXPECT_EQ("2", TestingSQLUtil::GetResultValueAsString(result, 1));
  EXPECT_EQ("0", TestingSQLUtil::GetResultValueAsString(result, 2));

  // free the database just created
  txn = txn_manager.BeginTransaction();
  catalog::Catalog::GetInstance()->DropDatabaseWithName(txn, DEFAULT_DB_NAME);
  txn_manager.CommitTransaction(txn);
}
Beispiel #4
0
TEST_F(InsertSQLTests, InsertIntoSelectSimpleAllType) {
  auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
  auto txn = txn_manager.BeginTransaction();
  catalog::Catalog::GetInstance()->CreateDatabase(txn, DEFAULT_DB_NAME);
  txn_manager.CommitTransaction(txn);

  CreateAndLoadTable4();
  CreateAndLoadTable5();

  std::vector<ResultValue> result;
  std::vector<FieldInfo> tuple_descriptor;
  std::string error_message;
  int rows_changed;
  std::unique_ptr<optimizer::AbstractOptimizer> optimizer(
      new optimizer::Optimizer());

  // TEST CASE 1
  std::string query_1("INSERT INTO test5 SELECT * FROM test4;");

  txn = txn_manager.BeginTransaction();
  auto plan =
      TestingSQLUtil::GeneratePlanWithOptimizer(optimizer, query_1, txn);
  txn_manager.CommitTransaction(txn);
  EXPECT_EQ(plan->GetPlanNodeType(), PlanNodeType::INSERT);

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(optimizer, query_1, result,
                                               tuple_descriptor, rows_changed,
                                               error_message);

  EXPECT_EQ(2, rows_changed);

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(
      optimizer, "SELECT * FROM test4 WHERE a=1", result, tuple_descriptor,
      rows_changed, error_message);
  EXPECT_EQ(11, result.size());
  EXPECT_EQ("1", TestingSQLUtil::GetResultValueAsString(result, 0));
  EXPECT_EQ("2", TestingSQLUtil::GetResultValueAsString(result, 1));
  EXPECT_EQ("3", TestingSQLUtil::GetResultValueAsString(result, 2));
  EXPECT_EQ("4", TestingSQLUtil::GetResultValueAsString(result, 3));
  EXPECT_EQ("5.1", TestingSQLUtil::GetResultValueAsString(result, 4));
  EXPECT_EQ("6.1", TestingSQLUtil::GetResultValueAsString(result, 5));
  EXPECT_EQ("2017-10-10 00:00:00.000000+00",
            TestingSQLUtil::GetResultValueAsString(result, 6));
  EXPECT_EQ("A", TestingSQLUtil::GetResultValueAsString(result, 7));
  EXPECT_EQ("a", TestingSQLUtil::GetResultValueAsString(result, 8));
  EXPECT_EQ('1', TestingSQLUtil::GetResultValueAsString(result, 9).at(0));
  EXPECT_EQ("true", TestingSQLUtil::GetResultValueAsString(result, 10));

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(
      optimizer, "SELECT * FROM test5 WHERE a=1", result, tuple_descriptor,
      rows_changed, error_message);
  EXPECT_EQ(11, result.size());
  EXPECT_EQ("1", TestingSQLUtil::GetResultValueAsString(result, 0));
  EXPECT_EQ("2", TestingSQLUtil::GetResultValueAsString(result, 1));
  EXPECT_EQ("3", TestingSQLUtil::GetResultValueAsString(result, 2));
  EXPECT_EQ("4", TestingSQLUtil::GetResultValueAsString(result, 3));
  EXPECT_EQ("5.1", TestingSQLUtil::GetResultValueAsString(result, 4));
  EXPECT_EQ("6.1", TestingSQLUtil::GetResultValueAsString(result, 5));
  EXPECT_EQ("2017-10-10 00:00:00.000000+00",
            TestingSQLUtil::GetResultValueAsString(result, 6));
  EXPECT_EQ("A", TestingSQLUtil::GetResultValueAsString(result, 7));
  EXPECT_EQ("a", TestingSQLUtil::GetResultValueAsString(result, 8));
  EXPECT_EQ('1', TestingSQLUtil::GetResultValueAsString(result, 9).at(0));
  EXPECT_EQ("true", TestingSQLUtil::GetResultValueAsString(result, 10));

  TestingSQLUtil::ExecuteSQLQueryWithOptimizer(
      optimizer, "SELECT * FROM test5 WHERE a=11", result, tuple_descriptor,
      rows_changed, error_message);
  EXPECT_EQ(11, result.size());
  EXPECT_EQ("11", TestingSQLUtil::GetResultValueAsString(result, 0));
  EXPECT_EQ("12", TestingSQLUtil::GetResultValueAsString(result, 1));
  EXPECT_EQ("13", TestingSQLUtil::GetResultValueAsString(result, 2));
  EXPECT_EQ("14", TestingSQLUtil::GetResultValueAsString(result, 3));
  EXPECT_EQ("15.1", TestingSQLUtil::GetResultValueAsString(result, 4));
  EXPECT_EQ("16.1", TestingSQLUtil::GetResultValueAsString(result, 5));
  EXPECT_EQ("2017-10-11 00:00:00.000000+00",
            TestingSQLUtil::GetResultValueAsString(result, 6));
  EXPECT_EQ("B", TestingSQLUtil::GetResultValueAsString(result, 7));
  EXPECT_EQ("b", TestingSQLUtil::GetResultValueAsString(result, 8));
  EXPECT_EQ('2', TestingSQLUtil::GetResultValueAsString(result, 9).at(0));
  EXPECT_EQ("false", TestingSQLUtil::GetResultValueAsString(result, 10));

  // free the database just created
  txn = txn_manager.BeginTransaction();
  catalog::Catalog::GetInstance()->DropDatabaseWithName(txn, DEFAULT_DB_NAME);
  txn_manager.CommitTransaction(txn);
}
Beispiel #5
0
int	main(int argc, char** argv) {
	if ( argc < 2 ) {
		std::cerr << "Arg is missing" << std::endl;
		usage();
		return EXIT_FAILURE;
	}

	/*
	 * Dealing with settings
	 */

	m_settings	settings;

	if ( argc > 2 ) {
		int c;
		while ((c = getopt (argc, argv, "h:u:p:d:s:f:")) != -1 ) {
			switch (c) {
				case 'h':
					settings.insert("hostname", optarg);
					break;
				case 'u':
					settings.insert("username", optarg);
					break;
				case 'p':
					settings.insert("password", optarg);
					break;
				case 'd':
					settings.insert("driver", optarg);
					break;
				case 's':
					settings.insert("database", optarg);
					break;
				case 'f':
					settings.insert("import_type", optarg);
					break;
				case '?':
					return EXIT_FAILURE;
			}
		}
	} else {
		QCoreApplication::setOrganizationName("nsrl_toolkit");
		QCoreApplication::setApplicationName("rds_bench");

	}

	if ( check_settings(settings) == false )
		return EXIT_FAILURE;

	QSqlDatabase	db;

	qint64		rows = 0;
	qint64		total_time = 0;

	// Create the db object
	if ( init_db(db, settings) == false )
		return EXIT_FAILURE;

	QSqlQuery	query_1(db);
	QSqlQuery	query_2(db);

	db.transaction();
	if ( db.driverName().compare("PGSQL") == 0 )
		start_pgsql(rows, total_time, db, query_1, query_2);
	if ( db.driverName().compare("MYSQL") == 0 )
		start_mysql(rows, total_time, db, query_1, query_2);
	db.rollback();

	/*
	 * Ending
	 */

	if ( rows > 0 ) {
		std::cout << "Elapsed time: " << total_time << " milliseconds (" << (float)total_time / 1000.0 << " seconds)" << std::endl;
		std::cout << "Processed lines: " << rows << std::endl;
		std::cout << "Speed: " << (float)rows / ((float)total_time / 1000.0 ) << " rows / second" << std::endl;
	} else {
		std::cout << "No line returned" << std::endl;
	}

	// Close and destroy the db object
	db.close();
	QSqlDatabase::removeDatabase(settings.value("driver"));

	return EXIT_SUCCESS;
}