Tardigrade for GO App & Mod

Tardigrade is a small no-SQL database app or mod for small go applications with many features.

App: $ git clone https://github.com/gcclinux/tardigrade.git
Mod: $ go get github.com/gcclinux/tardigrade-mod
Binary: https://github.com/gcclinux/tardigrade/tree/main/bin

Current structure and available functions()

type Tardigrade struct{}

func (*Tardigrade).AddField(key string, data string) bool
func (*Tardigrade).CountSize() int
func (*Tardigrade).CreateDB() (msg string, status bool)
func (*Tardigrade).CreatedDBCopy() (msg string, status bool)
func (*Tardigrade).DeleteDB() (msg string, status bool)
func (*Tardigrade).EmptyDB() (msg string, status bool)
func (*Tardigrade).FirstField(f string) string
func (*Tardigrade).FirstXFields(count int) []byte
func (*Tardigrade).GetUpdated() (updated string)
func (*Tardigrade).GetVersion() (release string)
func (*Tardigrade).LastField(f string) string
func (*Tardigrade).LastXFields(count int) []byte
func (*Tardigrade).ModifyField(id int, k string, v string) (msg string, status bool)
func (*Tardigrade).RemoveField(id int) (string, bool)
func (*Tardigrade).SelectByID(id int, f string) string
func (*Tardigrade).UniqueID() int

Binary HOW-TO: https://github.com/gcclinux/tardigrade#readme

Module HOW-TO (HERE) or https://github.com/gcclinux/tardigrade-mod#readme

CreateDB – This function will create a database file if it does not exist and return true | false

function: CreateDB()

Example 1: (ignore return)
	tar := tardigrade.Tardigrade{}
	tar.CreateDB()

Example 2 (capture return):
	tar := tardigrade.Tardigrade{}
	msg, status := tar.CreateDB()
	fmt.Println(msg, status)

Return:
	Created: <full_path>/tardigrade.db true
	Exist: <full_path>/tardigrade.db false

DeleteDB – WARNING – this function delete the database file return true | false

function: DeleteDB()

Example 1: (ignore return)
	tar := tardigrade.Tardigrade{}
	tar.DeleteDB()

Example 2 (capture return):
	tar := tardigrade.Tardigrade{}
	msg, status := tar.DeleteDB()
	fmt.Println(msg, status)

Return:
	Removed: <full_path>/tardigrade.db true
	Unavailable: <full_path>/tardigrade.db false

CreatedDBCopy creates a copy of the Database and store in UserHomeDir()

function: CreatedDBCopy()

Example 1: (ignore return)
	tar := tardigrade.Tardigrade{}
	tar.CreatedDBCopy()

Example 2 (capture return):
	tar := tardigrade.Tardigrade{}
	msg, status := tar.CreatedDBCopy()
	fmt.Println(msg, status)

Return:
	Copy: <full_path>/tardigradecopy.db true
	Failed: database tardigrade.db missing! false
	Failed: buffer error failed to create database! false
	Failed: permission error failed to create database! false

EmptyDB function – WARNING – this will destroy the database and all data stored in it!

function: EmptyDB()

Example 1: (ignore return)
	tar := tardigrade.Tardigrade{}
	tar.EmptyDB()

Example 2 (capture return):
	tar := tardigrade.Tardigrade{}
	msg, status := tar.EmptyDB()
	fmt.Println(msg, status)

Return:
	Empty: database now clean! true
	Failed: no permission to re-create! false
	Missing: could not find database false! false

AddField() function take in ((key)string, (Value) string) and add to database.

function: AddField()

Example 1: (ignore return)
	tar := tardigrade.Tardigrade{}
	tar.AddField("New string Entry", "string of data representing a the value")

Example 2 (capture return):
	tar := tardigrade.Tardigrade{}
	status := tar.AddField("New string Entry", "string of data representing a the value")
	fmt.Println(status)

Return:
	true | false

CountSize() function will return number of rows in the gojsondb.db

function: CountSize()

Example (capture return):
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.CountSize())

Result:
	44

FirstField func returns the first entry of gojsondb.db in all formats [ raw | json | id | key | value ] specify format required

function: FirstField()

Example 1: (true | failed)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.FirstField("raw"))

Result: 
	{"id":1,"key":"one","data":"string data test"}
	Failed: database tardigrade.db is empty!
	Failed: database tardigrade.db missing!

Example 2: (true)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.FirstField("json"))

Result:
{
        "id": 1,
        "key": "New string Entry",
        "data": "string of data representing a the value"
}

LastField() func returns the last entry in multi-format [ raw | json | id | key | value ]

function: LastField()

Example 1: (true | failed)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.FirstField("raw"))

Result: 
	{"id":44,"key":"New Entry","data":"string of data representing a the value"}
	Failed: database tardigrade.db is empty!
	Failed: database tardigrade.db missing!

Example 2: (true)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.LastField("value"))

Result:
	string of data representing a the value

Example 3: (true)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.LastField("key"))

Result:
	New Entry

Example: 4 (true)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.LastField("json"))

Result:
{
        "id": 44,
        "key": "New Entry",
        "data": "string of data representing a the value"
}

SelectByID func returns an entry string for a specific id in all formats [ raw | json | id | key | value ]

function: SelectByID()

Example 1: (true)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.SelectByID(10, "raw"))

Result:
	{"id":10,"key":"Roman","data":"string of data representing a the value of X"}

Example 2: (false)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.SelectByID(100, "raw"))

Result:
	Record 100 is empty!

Example 3: (true)
	tar := tardigrade.Tardigrade{}
	fmt.Println(tar.SelectByID(25, "json"))

Result:
{
        "id": 25,
        "key": "New string Entry 23",
        "data": "string of data representing a the value"
}

UniqueID function returns an int for the last used UniqueID

function: UniqueID()

Example: (always true)
	tar := Tardigrade{}
	fmt.Println(tar.UniqueID())

Result:
	52

FirstXFields returns last X number of entries from db in byte[] format

function: FirstXFields()

Example:
	tar := tardigrade.Tardigrade{}
	var received = tar.FirstXFields(2)

	type MyStruct struct {
		Id   int
		Key  string
		Data string
	}

	bytes := received
	var data []MyStruct
	size := len(data)
	json.Unmarshal(bytes, &data)

	if size == 1 {
		fmt.Printf("id: %v, key: %v, data: %s", data[0].Id, data[0].Key, data[0].Data)
	} else {
		for x := range data {
			fmt.Printf("id: %v, key: %v, data: %s", data[x].Id, data[x].Key, data[x].Data)
			fmt.Println()
		}
	}

Result:
	id: 1, key: New string Entry, data: string of data representing a the value
	id: 2, key: New string Entry 0, data: string of data representing a the value

LastXFields returns last X number of entries from db in values byte[] format

function: LastXFields()

Example 1: (always true)
	tar := tardigrade.Tardigrade{}
	var received = tar.LastXFields(2)

	type MyStruct struct {
		Id   int
		Key  string
		Data string
	}

	bytes := received
	var data []MyStruct
	size := len(data)
	json.Unmarshal(bytes, &data)

	if size == 1 {
		fmt.Printf("id: %v, key: %v, data: %s", data[0].Id, data[0].Key, data[0].Data)
	} else {
		for x := range data {
			fmt.Printf("id: %v, key: %v, data: %s", data[x].Id, data[x].Key, data[x].Data)
			fmt.Println()
		}
	}

Result:
	id: 51, key: New string Entry 49, data: string of data representing a the value
	id: 52, key: New string Entry 50, data: string of data representing a the value

RemoveField function takes an unique field id as an input and remove the matching field entry

function: RemoveField()

Example 1: (true | false)
	tar := tardigrade.Tardigrade{}
	msg, status := tar.RemoveField(2)
	fmt.Println(msg, status)

Result:
	{"id":2,"key":"New string Entry 0","data":"string of data representing a the value"} true
	Record 2 is empty! false
	Database tardigrade.db is empty! false

ModifyField function takes ID, Key, Value and update row = ID with new information provided

ModifyField(2, “Updated key”, “Updated data set with new inforation”)

Example 1: (true)
	tar := tardigrade.Tardigrade{}
	change, status := tar.ModifyField(2, "Updated key 2", "with new Updated data set with and new inforation")
	fmt.Println(change, status)

Result:
	{"id":2,"key":"Updated key 2","data":"with new Updated data set with and new inforation"} true

Example 2: (false)
	tar := tardigrade.Tardigrade{}
	change, status := tar.ModifyField(100, "Updated key 2", "with new Updated data set with and new inforation")
	fmt.Println(change, status)

result:
	Record 100 is empty! false

Additon couple of informaional functions

Example:
	package main

	import (
		"fmt"

		"github.com/gcclinux/tardigrade-mod"
	)

	func main() {
		tar := tardigrade.Tardigrade{}

		fmt.Println(tar.GetUpdated())
		fmt.Println(tar.GetVersion())
	}

Result:
	Thu 16 Feb 19:13:27 GMT 2023
	0.0.3

RELEASE NOTE:

** release 0.0.1 - Initial version
** release 0.0.2 - Updated README.md and corrected some issues.
** release 0.0.3 - Modified to use structure method
** release 0.0.4 - Converted tardigrade app to tardigrade-mod

OUTSTANDING:

** Write and share some test functions