From 508d0e96989933832fe2a4118983f9191c2ef797 Mon Sep 17 00:00:00 2001
From: Manish R Jain <manishrjain@gmail.com>
Date: Wed, 14 Oct 2015 13:41:10 +1100
Subject: [PATCH] Introduce posting lists

---
 plist/main.go        | 23 +++++++++++++---------
 types.fbs            |  7 +++----
 types/PostingList.go | 45 ++++++++++++++++++++++++++++++++++++++++++++
 types/Uid.go         | 43 ------------------------------------------
 4 files changed, 62 insertions(+), 56 deletions(-)
 create mode 100644 types/PostingList.go
 delete mode 100644 types/Uid.go

diff --git a/plist/main.go b/plist/main.go
index f118cfe6..3c4aacdd 100644
--- a/plist/main.go
+++ b/plist/main.go
@@ -58,12 +58,15 @@ func main() {
 
 	batch := new(leveldb.Batch)
 	b := flatbuffers.NewBuilder(0)
-	oi := b.CreateString("mrjn is a smart kid")
-	on := b.CreateString("His name is jain")
-	types.UidStart(b)
-	types.UidAddId(b, oi)
-	types.UidAddName(b, on)
-	oe := types.UidEnd(b)
+
+	types.PostingListStartIdsVector(b, 2)
+	b.PlaceUint64(5)
+	b.PlaceUint64(2)
+	vec := b.EndVector(2)
+
+	types.PostingListStart(b)
+	types.PostingListAddIds(b, vec)
+	oe := types.PostingListEnd(b)
 	b.Finish(oe)
 	fmt.Println("Value byte size:", len(b.Bytes))
 
@@ -92,9 +95,11 @@ func main() {
 	}
 	fmt.Println("Value byte size from Leveldb:", len(val))
 
-	uid := types.GetRootAsUid(val, 0)
-	fmt.Println("buffer.uid id =", string(uid.Id()))
-	fmt.Println("buffer.uid name =", string(uid.Name()))
+	plist := types.GetRootAsPostingList(val, 0)
+	fmt.Println("buffer.uid id length =", plist.IdsLength())
+	for i := 0; i < plist.IdsLength(); i++ {
+		fmt.Printf("[%d] [%d]\n", i, plist.Ids(i))
+	}
 	// http.HandleFunc("/add", addTriple)
 	// http.ListenAndServe(":8080", nil)
 
diff --git a/types.fbs b/types.fbs
index d25c25bb..53cdaa1b 100644
--- a/types.fbs
+++ b/types.fbs
@@ -1,8 +1,7 @@
 namespace types;
 
-table Uid {
-	id:string;
-	name:string;
+table PostingList {
+	ids:[ulong];
 }
 
-root_type Uid;
+root_type PostingList;
diff --git a/types/PostingList.go b/types/PostingList.go
new file mode 100644
index 00000000..ffe2063b
--- /dev/null
+++ b/types/PostingList.go
@@ -0,0 +1,45 @@
+// automatically generated, do not modify
+
+package types
+
+import (
+	flatbuffers "github.com/google/flatbuffers/go"
+)
+type PostingList struct {
+	_tab flatbuffers.Table
+}
+
+func GetRootAsPostingList(buf []byte, offset flatbuffers.UOffsetT) *PostingList {
+	n := flatbuffers.GetUOffsetT(buf[offset:])
+	x := &PostingList{}
+	x.Init(buf, n + offset)
+	return x
+}
+
+func (rcv *PostingList) Init(buf []byte, i flatbuffers.UOffsetT) {
+	rcv._tab.Bytes = buf
+	rcv._tab.Pos = i
+}
+
+func (rcv *PostingList) Ids(j int) uint64 {
+	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
+	if o != 0 {
+		a := rcv._tab.Vector(o)
+		return rcv._tab.GetUint64(a + flatbuffers.UOffsetT(j * 8))
+	}
+	return 0
+}
+
+func (rcv *PostingList) IdsLength() int {
+	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
+	if o != 0 {
+		return rcv._tab.VectorLen(o)
+	}
+	return 0
+}
+
+func PostingListStart(builder *flatbuffers.Builder) { builder.StartObject(1) }
+func PostingListAddIds(builder *flatbuffers.Builder, ids flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(ids), 0) }
+func PostingListStartIdsVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { return builder.StartVector(8, numElems, 8)
+}
+func PostingListEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { return builder.EndObject() }
diff --git a/types/Uid.go b/types/Uid.go
deleted file mode 100644
index 4695ecc3..00000000
--- a/types/Uid.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// automatically generated, do not modify
-
-package types
-
-import (
-	flatbuffers "github.com/google/flatbuffers/go"
-)
-type Uid struct {
-	_tab flatbuffers.Table
-}
-
-func GetRootAsUid(buf []byte, offset flatbuffers.UOffsetT) *Uid {
-	n := flatbuffers.GetUOffsetT(buf[offset:])
-	x := &Uid{}
-	x.Init(buf, n + offset)
-	return x
-}
-
-func (rcv *Uid) Init(buf []byte, i flatbuffers.UOffsetT) {
-	rcv._tab.Bytes = buf
-	rcv._tab.Pos = i
-}
-
-func (rcv *Uid) Id() []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(4))
-	if o != 0 {
-		return rcv._tab.ByteVector(o + rcv._tab.Pos)
-	}
-	return nil
-}
-
-func (rcv *Uid) Name() []byte {
-	o := flatbuffers.UOffsetT(rcv._tab.Offset(6))
-	if o != 0 {
-		return rcv._tab.ByteVector(o + rcv._tab.Pos)
-	}
-	return nil
-}
-
-func UidStart(builder *flatbuffers.Builder) { builder.StartObject(2) }
-func UidAddId(builder *flatbuffers.Builder, id flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(0, flatbuffers.UOffsetT(id), 0) }
-func UidAddName(builder *flatbuffers.Builder, name flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(1, flatbuffers.UOffsetT(name), 0) }
-func UidEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { return builder.EndObject() }
-- 
GitLab