Skip to content

Commit a729040

Browse files
authored
encode column name (#197)
1 parent decf5ec commit a729040

File tree

3 files changed

+32
-9
lines changed

3 files changed

+32
-9
lines changed

bindings/python/README.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,20 @@ Tonbo's Python bindings can be used to build data-intensive applications, includ
1010
from tonbo import DbOption, Column, DataType, Record, TonboDB, Bound
1111
from tonbo.fs import from_filesystem_path
1212
import asyncio
13+
import os
1314

1415
# define a Tonbo record
1516
@Record
1617
class User:
17-
age = Column(DataType.INT8, name="age", primary_key=True)
18-
height = Column(DataType.INT16, name="height", nullable=True)
19-
weight = Column(DataType.INT8, name="weight", nullable=False)
18+
age = Column(DataType.Int8, name="age", primary_key=True)
19+
height = Column(DataType.Int16, name="height", nullable=True)
20+
weight = Column(DataType.Int8, name="weight", nullable=False)
2021

2122
async def main():
2223

23-
db = TonboDB(DbOption(from_filesystem_path("./db_path/users")), User())
24+
if not os.path.exists("db_path/users"):
25+
os.makedirs("db_path/users")
26+
db = TonboDB(DbOption(from_filesystem_path("db_path/users")), User())
2427

2528
await db.insert(User(age=18, height=175, weight=60))
2629
record = await db.get(18)

bindings/python/tests/test_db.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,31 @@ async def test_db_remove():
5252
for i in range(0, 100):
5353
if i % 2 == 0:
5454
await db.insert(User(age=i, height=i * 10, weight=i * 20))
55-
# else:
56-
# await db.remove(i)
55+
else:
56+
await db.remove(i)
5757

5858
for i in range(0, 100):
59-
print(i)
6059
user = await db.get(i)
6160
if i % 2 == 0:
6261
assert user == {"age": i, "height": i * 10, "weight": i * 20}
6362
else:
6463
assert user is None
64+
65+
66+
@pytest.mark.asyncio
67+
async def test_db_recover():
68+
temp_dir = tempfile.TemporaryDirectory()
69+
db = TonboDB(DbOption(temp_dir.name), User())
70+
for i in range(0, 100):
71+
await db.insert(User(age=i, height=i * 10, weight=i * 20))
72+
73+
for i in range(0, 100):
74+
user = await db.get(i)
75+
assert user == {"age": i, "height": i * 10, "weight": i * 20}
76+
77+
await db.flush_wal()
78+
79+
db = TonboDB(DbOption(temp_dir.name), User())
80+
for i in range(0, 100):
81+
user = await db.get(i)
82+
assert user == {"age": i, "height": i * 10, "weight": i * 20}

src/record/runtime/column.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,11 @@ macro_rules! implement_decode_col {
253253
},
254254
)*
255255
};
256+
let name = String::decode(reader).await?;
256257
Ok(Column {
257258
datatype,
258259
is_nullable,
259-
name: "".to_owned(),
260+
name,
260261
value,
261262
})
262263
}
@@ -295,11 +296,12 @@ macro_rules! implement_encode_col {
295296
}
296297
)*
297298
};
299+
self.name.encode(writer).await?;
298300
Ok(())
299301
}
300302

301303
fn size(&self) -> usize {
302-
3 + match self.datatype {
304+
3 + self.name.size() + match self.datatype {
303305
$(
304306
Datatype::$Datatype => {
305307
if let Some(value) = self.value.as_ref().downcast_ref::<$Type>() {

0 commit comments

Comments
 (0)