diff --git a/README.md b/README.md index 69529bd..754cea7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,122 @@ ColdDB =========== -ColdDB is a lua library that implements a serverless, zero-configuration, NoSQL database engine. \ No newline at end of file +ColdDB is a lua library that implements a serverless, NoSQL database engine.
+It provides a key or key-value storage system using plain Lua tables. It also can iterate through the keys.
+It is not required to add this mod to secure.trusted_mods this mod will still work. + +Usage +=========== + +Copy *colddb.lua* file to your minetest mod or game. Copy the code from colddb's init file to your mods init file
+Then create a lua file for handling database's or any file you like.
+Write this code in your lua file. +1. create a directory and link it as a database. +```lua +coldbase = colddb.get_db("mydb") +``` +2. added an extra folder to the directory. every new file will be added to the global tag(folder). +```lua +colddb.add_global_tag(coldbase,"ips") +``` +3. store key item(this key has no value) +```lua +colddb.set_key(coldbase,"MyKey") +``` +4. store key-value item +```lua +colddb.set(coldbase,"MyKeyAndValue","Hello world") +``` +5. retrieve items (get_key will return true, false, or nil) +```lua +local key_and_value = colddb.get(coldbase,"MyKeyAndValue") +local key = colddb.get_key(coldbase,"MyKey") +``` +6. delete key(file) this function works on both keys and key-value keys. +```lua +colddb.remove(coldbase,"MyKeyAndValue") +``` +7. if add_to_mem_pool is true(true by default). keys are stored in a lua table(memory) for 30 seconds or more depending on its use. This is to prevent the database from constantly loading up the data file. +```lua +coldbase.add_to_mem_pool = true +``` +8. if indexes is true(false by default). When a key file is created an indexing file stores the key for look-ups. this makes it possible to iterate through keys. +```lua +coldbase.indexes = true +``` +9. only if coldbase.indexes == true. returns the amount of keys are in the indexing file. +```lua +colddb.get_count(coldbase) +``` +10. only if coldbase.indexes == true. iterates through the indexing file 50 times per game tick(breaks and ends if it reached the end of the file). +```lua +colddb.iterate_index_table(coldbase,nil,func_list_keys,nil,50) +``` +11. adds folders which can be used in other functions that have tag_name arg. +```lua +colddb.add_tag(coldbase,"Extra_Folder",{"Extra","Folder"}) +``` +12. returns the tag name if the tag does not exists creates it. +```lua +colddb.get_or_add_tag(coldbase,"Extra_Folder",{"Extra","Folder"}) +``` +13. remove tag by name. +```lua +colddb.remove_tag(coldbase,"Extra_Folder") +``` + +Quick Look +=========== + +```lua +-- create an directory(watchlist) and link it as a database. +ip_db = colddb.get_db("watchlist") +-- add an extra folder to the directory. +colddb.add_global_tag(ip_db,"ips") + +-- return a recorded ip address from the data base. +function ip_db.find(player) + local f = colddb.get(ip_db,player) + if f then + return f + end + return nil +end + +-- Key is the file and file name. Value is the content's within the file. +-- global tag(ips)--->key(Player name)--->value(ip address) +function ip_db.record_ip(player,ip) + colddb.set(ip_db,player, ip) +end + +function ip_db.delete(player) + colddb.remove(db,player) +end + +-- When ever a player join's his/her ip address is recorded to the database by player name. +minetest.register_on_prejoinplayer(function(name, ip) + ip_db.record_ip(name,ip) +end) +``` + +Quick Look Notes +=========== + +In the example above we could also create a more complex ip database using tags. Creating tags named after the player then assigning the ip files to it.
+This way we could store many ips associated with the player instead of just one ip. + +API +=========== + +- **Functions** + + - **colddb.get_db(directory) --> db** + + Creates an directory and links it as a database. Returns a 'db' obeject. + + - + +License +=========== + +ColdDB is distributed under the LGPLv2.1+ license. \ No newline at end of file diff --git a/colddb.lua b/colddb.lua index dab5cdd..d220e05 100644 --- a/colddb.lua +++ b/colddb.lua @@ -85,6 +85,13 @@ function colddb.get_tag(db,name) return "" end +function colddb.get_or_add_tag(db,name,tag) + if not db.tags[name] then + colddb.add_tag(db,name,tag) + end + return name +end + function colddb.remove_tag(db,name) if db.tags[name] then local delete_path = string.format("%s%s",db.directory,db.tags[name])