Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Table::set and Table::get should return bool and pass the result string as ref-argument. #5

Closed
AlexanderMihail opened this issue Apr 11, 2024 · 1 comment
Assignees

Comments

@AlexanderMihail
Copy link
Owner

Table::set should return false if the key is already present, rather than update the value.
Table::get should return false if the key is not present, rather than return "" which should be a legal value.

AlexanderMihail pushed a commit that referenced this issue Apr 13, 2024
… table as well as any other user-table. The root of the web server is a generated HTML page with navigation for all the system features. There is now a map of tables. Selecting the current table is with the /tablename/?use rest command. Tables can also be dropped. Table::compact was reworked to shift-up deleted keys in the index. An index_revolver coroutine was introduced to return one index per invocation. This logic also has index cleanup capabilities. The Table::list() command uses this coroutine to produce the list of all keys. Table::get/set are now boolean. The set prevents overinserting and updating of unknown keys. The get returns false if the key is unknown. This allows now for inserting or updating "null" values. Better statistics. Better formatted output. All REST logic is in one DefaultHandle where the table list lock is maneaged. Everything the DB server does is listed in the / page which is built by DefaultHandle::build_help. Added the new Table::self_test method and the corresponding /?selftest=0 REST command. This system of self-testing obsoletes the rest.bat file while also aiming at raw performance.

This version has problems with deleting keys that are in cache. TODO.
This version closes issues: #1, #2, #3, #4, #5, #6, #8. It advances on issues #13 and #11.
@AlexanderMihail
Copy link
Owner Author

The newest signatures for Table::get and Table::set are:

auto get(std::string key, std::string &value, bool reentered=false, bool remove=false)

bool set(std::string key, std::string val, bool update)

The empty string is now an accepted value.
Table::set prevents multiple insertions and also updating a key that doesn't exist.
Table::get returns a pair of bool and cache iterator. The retrieved value is in the string&value parameter. The second return value is the iterator to the corresponding cache line. Table::set first does a get, then uses the iterator get returns.

Relates to #6.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant