t_db2 1.1.0
t_db2: ^1.1.0 copied to clipboard
TDB2<T> is a base abstract class for a generic binary database.It is designed to provide type-safe, object-oriented (OOP) database operations for any user-defined type `T`.
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:t_db2/t_db2.dart';
void main() async {
final db = TDB2.getInstance();
db.registerAdapterNotExists<Post>(PostAdapter());
db.registerAdapterNotExists<PostContent>(PostContentAdapter());
await db.open('test.db');
final box = db.getBox<Post>();
// final content = db.getBox<PostContent>();
// await box.deleteAllByIds([1, 2, 3, 4]);
// await box.add(Post(title: 'one'));
// await box.add(Post(title: 'two'));
// await box.add(Post(title: 'three'));
// await box.add(Post(title: 'four'));
// await box.updateById(1, Post(title: 'one two'));
// await box.updateById(1, Post(title: 'one three'));
await for (var post in box.getAllStream()) {
print(post);
}
print('empty data: ${db.emptyData}');
print('lastIndex: ${db.lastIndex}');
print('magic: ${db.magic}');
print('version: ${db.version}');
print('deletedCount: ${db.deletedCount}');
print('deletedSize: ${db.deletedSize}');
await db.close();
// print(
// await TDB2.getHeaderFromPath(
// '/home/thancoder/projects/plugins/t_db/test.db',
// ),
// );
}
class PostAdapter extends TDB2Adapter<Post> {
@override
int get adapterTypeId => 1;
@override
Post fromMap(Map<String, dynamic> map) {
return Post.fromJson(map);
}
@override
int getId(Post value) {
return value.id;
}
@override
Map<String, dynamic> toMap(Post value) {
return value.toJson();
}
}
class PostContentAdapter extends TDB2Adapter<PostContent> {
@override
int get adapterTypeId => 2;
@override
int parentId(PostContent value) {
return value.postId;
}
@override
PostContent fromMap(Map<String, dynamic> map) {
return PostContent.fromJson(map);
}
@override
int getId(PostContent value) {
return value.id;
}
@override
Map<String, dynamic> toMap(PostContent value) {
return value.toJson();
}
}
class Post {
final int id; //auto generated id
final String title;
const Post({this.id = 0, required this.title});
Map<String, dynamic> toJson() {
return {'id': id, 'title': title};
}
factory Post.fromJson(Map<String, dynamic> json) {
return Post(id: json['id'], title: json['title']);
}
Post copyWith({int? id, String? title}) {
return Post(id: id ?? this.id, title: title ?? this.title);
}
@override
String toString() => 'Post(id: $id, title: $title)';
}
class PostContent {
final int id; //auto generated id
final int postId;
final String content;
const PostContent({this.id = 0, required this.postId, required this.content});
Map<String, dynamic> toJson() {
return {'id': id, 'postId': postId, 'content': content};
}
factory PostContent.fromJson(Map<String, dynamic> json) {
return PostContent(
id: json['id'],
postId: json['postId'],
content: json['content'],
);
}
}