Example #1
0
  /** Test inserts using KeyRange query */
  @Test
  public void testKeyRangeWrites() throws Exception {
    Random random = new Random();
    VtGate vtgate = VtGate.connect("localhost:" + testEnv.port, 0);
    vtgate.begin();
    String sql =
        "insert into vtgate_test "
            + "(id, name, keyspace_id, age) "
            + "values (:id, :name, :keyspace_id, :age)";
    int count = 20;
    // Insert 20 rows per shard
    for (String shardName : testEnv.shardKidMap.keySet()) {
      List<KeyspaceId> kids = testEnv.getKeyspaceIds(shardName);
      KeyspaceId minKid = Collections.min(kids);
      KeyspaceId maxKid = Collections.max(kids);
      KeyRange kr = new KeyRange(minKid, maxKid);
      for (int i = 0; i < count; i++) {
        KeyspaceId kid = kids.get(i % kids.size());
        Query query =
            new QueryBuilder(sql, testEnv.keyspace, "master")
                .addBindVar(
                    BindVariable.forULong(
                        "id", UnsignedLong.valueOf("" + Math.abs(random.nextInt()))))
                .addBindVar(BindVariable.forString("name", ("name_" + i)))
                .addBindVar(BindVariable.forULong("keyspace_id", (UnsignedLong) kid.getId()))
                .addBindVar(BindVariable.forNull("age"))
                .addKeyRange(kr)
                .build();
        vtgate.execute(query);
      }
    }
    vtgate.commit();
    vtgate.close();

    // Check 40 rows exist in total
    vtgate = VtGate.connect("localhost:" + testEnv.port, 0);
    String selectSql = "select * from vtgate_test";
    Query allRowsQuery =
        new QueryBuilder(selectSql, testEnv.keyspace, "master")
            .setKeyspaceIds(testEnv.getAllKeyspaceIds())
            .build();
    Cursor cursor = vtgate.execute(allRowsQuery);
    Assert.assertEquals(count * 2, cursor.getRowsAffected());

    // Check 20 rows exist per shard
    for (String shardName : testEnv.shardKidMap.keySet()) {
      Query shardRows =
          new QueryBuilder(selectSql, testEnv.keyspace, "master")
              .setKeyspaceIds(testEnv.getKeyspaceIds(shardName))
              .build();
      cursor = vtgate.execute(shardRows);
      Assert.assertEquals(count, cursor.getRowsAffected());
    }

    vtgate.close();
  }