Skip to content

Commit

Permalink
ssue=#462 Python sdk put with timestamp (#1237)
Browse files Browse the repository at this point in the history
* issue=#462 support write with timestamp
  • Loading branch information
taocp authored and ajie committed Apr 21, 2017
1 parent c6e234c commit d30c14e
Showing 4 changed files with 62 additions and 6 deletions.
8 changes: 6 additions & 2 deletions include/tera_c.h
Original file line number Diff line number Diff line change
@@ -68,11 +68,15 @@ void tera_table_apply_reader_batch(tera_table_t* table, tera_row_reader_t** read
tera_row_mutation_t* tera_row_mutation(tera_table_t* table, const char* row_key, uint64_t keylen);
void tera_table_apply_mutation(tera_table_t* table, tera_row_mutation_t* mutation);
void tera_table_apply_mutation_batch(tera_table_t* table, tera_row_mutation_t** mutation_batch, int64_t num);
void tera_row_mutation_put_kv(tera_row_mutation_t* mu,
const char* val, uint64_t vallen, int32_t ttl);
void tera_row_mutation_put_kv(tera_row_mutation_t* mu,
const char* val, uint64_t vallen, int32_t ttl);
void tera_row_mutation_put(tera_row_mutation_t* mu, const char* cf,
const char* qu, uint64_t qulen,
const char* val, uint64_t vallen);
void tera_row_mutation_put_with_timestamp(tera_row_mutation_t* mu, const char* cf,
const char* qu, uint64_t qulen,
int64_t timestamp,
const char* val, uint64_t vallen);
void tera_row_mutation_put_int64(tera_row_mutation_t* mu, const char* cf,
const char* qu, uint64_t qulen, int64_t val);
void tera_row_mutation_delete_column(tera_row_mutation_t* mu, const char* cf,
20 changes: 17 additions & 3 deletions src/sdk/python/TeraSdk.py
Original file line number Diff line number Diff line change
@@ -324,7 +324,8 @@ def PutKV(self, value, ttl):
value(string): cell的值
ttl: value 过期时间
"""
lib.tera_row_mutation_put_kv(self.mutation, value, c_uint64(len(value)), c_int32(ttl))
lib.tera_row_mutation_put_kv(self.mutation, value,
c_uint64(len(value)), c_int32(ttl))

def Put(self, cf, qu, value):
""" 写入(修改)这一行上
@@ -339,6 +340,12 @@ def Put(self, cf, qu, value):
qu, c_uint64(len(qu)),
value, c_uint64(len(value)))

def PutWithTimestamp(self, cf, qu, timestamp, value):
lib.tera_row_mutation_put_with_timestamp(self.mutation, cf,
qu, c_uint64(len(qu)),
timestamp,
value, c_uint64(len(value)))

def DeleteColumnAllVersions(self, cf, qu):
""" 删除这一行上
ColumnFamily为<cf>, Qualifier为<qu>的cell的所有版本
@@ -950,7 +957,7 @@ def init_function_prototype_for_table():
POINTER(c_char_p)]
lib.tera_table_put.restype = c_bool

lib.tera_table_put_kv.argtypes = [c_void_p, c_char_p, c_uint64,
lib.tera_table_put_kv.argtypes = [c_void_p, c_char_p, c_uint64,
c_char_p, c_uint64, c_int32,
POINTER(c_char_p)]
lib.tera_table_put_kv.restype = c_bool
@@ -999,14 +1006,21 @@ def init_function_prototype_for_table():

def init_function_prototype_for_row_mutation():
""" row_mutation"""
lib.tera_row_mutation_put_kv.argtypes = [c_void_p, c_char_p, c_uint64, c_int32]
lib.tera_row_mutation_put_kv.argtypes = [c_void_p, c_char_p,
c_uint64, c_int32]
lib.tera_row_mutation_put_kv.restype = None

lib.tera_row_mutation_put.argtypes = [c_void_p, c_char_p,
c_char_p, c_uint64,
c_char_p, c_uint64]
lib.tera_row_mutation_put.restype = None

lib.tera_row_mutation_put_with_timestamp.argtypes = [c_void_p, c_char_p,
c_char_p, c_uint64,
c_int64,
c_void_p, c_uint64]
lib.tera_row_mutation_put_with_timestamp.restype = None

lib.tera_row_mutation_put_int64.argtypes = [c_void_p, c_char_p,
c_char_p, c_uint64, c_int64]
lib.tera_row_mutation_put_int64.restype = None
31 changes: 31 additions & 0 deletions src/sdk/python/sample.py
Original file line number Diff line number Diff line change
@@ -78,6 +78,8 @@ def main():
# async get
async_get(table)

put_get_with_timestamp(table)

table.Close()
client.Close()
print("main() done\n")
@@ -170,6 +172,35 @@ def async_get(table):
time.sleep(0.01)


def put_get_with_timestamp(table):
print("\nput_get_with_timestamp")
key = "nput_get_with_timestamp"
mu = table.NewRowMutation(key)
mu.PutWithTimestamp("cf0", "qu0", 42, "value")
table.ApplyMutation(mu)
while not table.IsPutFinished():
time.sleep(0.01)

reader = table.NewRowReader(key)
reader.AddColumn("cf0", "qu0")
table.ApplyReader(reader)
while not table.IsGetFinished():
time.sleep(0.01)

status = reader.GetStatus()
if status.GetReasonNumber() != Status.OK:
print(status.GetReasonString())
return
while not reader.Done():
row = reader.RowKey()
column = reader.Family() + ":" + reader.Qualifier()
timestamp = str(reader.Timestamp())
assert reader.Timestamp() == 42
val = reader.Value()
print row + ":" + column + ":" + timestamp + ":" + val
reader.Next()


def put_get_int64(table, rowkey, cf, qu, value):
try:
table.PutInt64(rowkey, cf, qu, value)
9 changes: 8 additions & 1 deletion src/tera_c.cc
Original file line number Diff line number Diff line change
@@ -359,7 +359,7 @@ bool tera_table_is_get_finished(tera_table_t* table) {
return table->rep->IsGetFinished();
}

void tera_row_mutation_put_kv(tera_row_mutation_t* mu,
void tera_row_mutation_put_kv(tera_row_mutation_t* mu,
const char* val, uint64_t vallen, int32_t ttl) {
mu->rep->Put(std::string(val, vallen), ttl);
}
@@ -376,6 +376,13 @@ void tera_row_mutation_put(tera_row_mutation_t* mu, const char* cf,
mu->rep->Put(cf, std::string(qu, qulen), std::string(val, vallen));
}

void tera_row_mutation_put_with_timestamp(tera_row_mutation_t* mu, const char* cf,
const char* qu, uint64_t qulen,
int64_t timestamp,
const char* val, uint64_t vallen) {
mu->rep->Put(cf, std::string(qu, qulen), std::string(val, vallen), (int64_t)timestamp);
}

void tera_row_mutation_delete_column(tera_row_mutation_t* mu, const char* cf,
const char* qu, uint64_t qulen) {
mu->rep->DeleteColumn(cf, std::string(qu, qulen));

0 comments on commit d30c14e

Please sign in to comment.