NestaDB Script TutorialWhat is NestaDB Script ?
The script can be used to process the database of NestaDB.
NestaDB handles multiple databases as the datastore.
The script supports transaction processing. Can be treated as multiple updates.
NesteDB Script is using the Lua programming language. Create new script
Enter the script name to create. Edit the scriptEnter the script code in a text editor. Simple ExampleWill be displayed in the Output View When you run the following script. print("Hello World!") Create Database
Create a new database. -- create database dbname = "sampledb" result = ndb_create(dbname) if (result ~= true) then print(result) end Remove Database
Remove the database. -- find database dbname = "sampledb" if (ndb_find(dbname) == true) then -- remove database result = ndb_remove(dbname) if (result ~= true) then print(result) end end New Entity
Add a new entity to create the database. -- -- Function: -- create database -- function createDB(dbname) if (ndb_find(dbname) == true) then ndb_remove(dbname) end local result = ndb_create(dbname) if (result ~= true) then -- error print(result) return false end return true end -- -- Function: -- add fields -- Number(5), Name, English(3), Mathematics(3), Science(3) -- function addFields(db) local result = ndb_field_add(db, "Number", NDB_NUMBER, 0, true) if (result ~= true) then -- error print(result) return false end result = ndb_field_add(db, "Name", NDB_TEXT, 0, true) if (result ~= true) then -- error print(result) return false end result = ndb_field_add(db, "English", NDB_NUMBER, 3, true) if (result ~= true) then -- error print(result) return false end result = ndb_field_add(db, "Mathematics", NDB_NUMBER, 3, true) if (result ~= true) then -- error print(result) return false end result = ndb_field_add(db, "Science", NDB_NUMBER, 3, true) if (result ~= true) then -- error print(result) return false end return true end -- -- Function: -- add new Entity via cursor -- function newEntity(cursor, number, name, english, mathematics, science) -- create new Entity local result = ndb_cursor_new(cursor) if (result ~= true) then -- error print(result) return false end -- Number field local property = ndb_property_get(cursor, "Number") if (type(property) == "string") then -- error print(property) return false end result = ndb_property_putnum(property, number) if (result ~= true) then -- error print(result) return false end -- Name field property = ndb_property_get(cursor, "Name") if (type(property) == "string") then -- error print(property) return false end result = ndb_property_putstr(property, name) if (result ~= true) then -- error print(result) return false end -- English field property = ndb_property_get(cursor, "English") if (type(property) == "string") then -- error print(property) return false end if (string.len(english) > 0) then result = ndb_property_putnum(property, english) if (result ~= true) then -- error print(result) return false end end -- Math field property = ndb_property_get(cursor, "Mathematics") if (type(property) == "string") then -- error print(property) return false end if (string.len(mathematics) > 0) then result = ndb_property_putnum(property, mathematics) if (result ~= true) then -- error print(result) return false end end -- Science field property = ndb_property_get(cursor, "Science") if (type(property) == "string") then -- error print(property) return false end if (string.len(science) > 0) then result = ndb_property_putnum(property, science) if (result ~= true) then -- error print(result) return false end end -- Success return true end -- -- Will be executed for script from here. -- local db = "sampledb" if (createDB(db) == false) then return end if (addFields(db) == false) then return end local cursor = ndb_cursor_db(db) if (type(cursor) == "string") then -- error print(cursor) return end -- add entity newEntity(cursor, 12001, "Taro Yamada", 80, 100, 95) newEntity(cursor, 12002, "Hanako Tanaka", 95, 65, 80) newEntity(cursor, 12003, "Ichiro Saito", 92, 54, 65) newEntity(cursor, 12004, "Alice Goto", 100, 54, 47) newEntity(cursor, 12005, "Lynne Richards", 84, 85, 86) newEntity(cursor, 12006, "Rabbit Bertleman", 54, 37, "") newEntity(cursor, 12007, "Shaun Lopez", 78, "", 63) newEntity(cursor, 12008, "Susumu Inaba", 64, 54, 48) newEntity(cursor, 12009, "Lisa Sano", 96, 74, 76) newEntity(cursor, 12010, "Mark Tomson", "", 18, 0) -- close cursor ndb_cursor_close(cursor) Calculate the average scoreTo add average score of English, Mathematics and Science to the new field. -- -- Function: -- add average field -- function addFieldAverage(db) ndb_field_remove(db, "Average") local result = ndb_field_add(db, "Average", NDB_NUMBER, 3, true) if (result ~= true) then -- error print(result) return false end end -- -- Function: -- get score via cursor(field type is number) -- function getScore(cursor, fieldname) local property = ndb_property_get(cursor, fieldname) if (type(property) == "string") then -- error print(property) return false end return ndb_property_getnum(property) end -- -- Function: -- To calculate average of entity. -- Blank field is not the target of average. -- function calcEntity(cursor) local total_score = 0 local score_count = 0 local english = getScore(cursor, "English") if (english == false) then -- error return false end if (english ~= nil) then total_score = total_score + english score_count = score_count + 1 end local mathematics = getScore(cursor, "Mathematics") if (mathematics == false) then -- error return false end if (mathematics ~= nil) then total_score = total_score + mathematics score_count = score_count + 1 end local science = getScore(cursor, "Science") if (science == false) then -- error return false end if (science ~= nil) then total_score = total_score + science score_count = score_count + 1 end local average = 0 if (score_count > 0) then average = total_score / score_count -- truncate the decimal point average = math.floor(average) end property = ndb_property_get(cursor, "Average") if (type(property) == "string") then -- error print(property) return false end result = ndb_property_putnum(property, average) if (result ~= true) then -- error print(result) return false end return true end -- -- Will be executed for script from here. -- local db = "sampledb" -- add average field if (addFieldAverage(db) == false) then return end local cursor = ndb_cursor_db(db) if (type(cursor) == "string") then print(cursor) return end -- calculate average via cursor local count = ndb_cursor_count(cursor) for i = 1, count, 1 do result = calcEntity(cursor) if (result == true) then result = ndb_cursor_next(cursor) if (result == false) then break end end end -- close cursor ndb_cursor_close(cursor) Gets the data to set the search filterDisplays the data of less than average 60 points. -- -- Function: -- Gets string field value via cursor. -- function getString(cursor, fieldname) local property = ndb_property_get(cursor, fieldname) if (type(property) == "string") then -- error print(property) return false end return ndb_property_getstr(property) end -- -- Function: -- Gets number field value via cursor. -- function getNumber(cursor, fieldname) local property = ndb_property_get(cursor, fieldname) if (type(property) == "string") then -- error print(property) return false end return ndb_property_getnum(property) end -- -- Function: -- Display Number, Name and Average of the entity. -- function displayEntity(cursor) -- get value of the Number field. local number = getNumber(cursor, "Number") if (number == false) then return false end -- get value of the Name field. local name = getString(cursor, "Name") if (name == false) then return false end -- get value of the Average field. local average = getNumber(cursor, "Average") if (average == false) then return false end print(number .. " " .. name .. " : " .. average) return true end -- -- Will be executed for script from here. -- local db = "sampledb" -- new query local query = ndb_query_create(db) if (type(query) == "string") then -- error print(query) return end -- new search filter local filter = ndb_filter_create(query) if (type(filter) == "string") then -- error print(filter) return end -- add the filter condition -- condition: Average < 60 ndb_filter_add(filter, "Average", NDB_LT, 60) -- add the filter condition to the query. ndb_query_add(query, filter) -- close filter ndb_filter_close(filter) -- gets the cursor that matches the filter conditions. local cursor = ndb_cursor_query(query) if (type(cursor) == "string") then -- error print(cursor) return end -- close query ndb_query_close(query) -- cursor is target data. local count = ndb_cursor_count(cursor) for i = 1, count, 1 do result = displayEntity(cursor) if (result == true) then result = ndb_cursor_next(cursor) if (result == false) then break end end end -- close cursor ndb_cursor_close(cursor) NestaDB Script functions
Author: YAMAMOTO Naoki |