* app().registerHttpHandler() accepts coroutine as handlers
* HttpController can use coroutine as handlers'
* Http request handlers with coroutine catches exception instead of crashing the entire app
* DbClient now has execSqlCoro that is awaitable
* DbClient now has newTransactionCoro that is awaitable
* HttpClient have awaitable sendRequestCoro
* WebSocketClient have awaitable connectToServerCoro
* WebSocketClient have setAsyncMessageHandler and setAsyncConnectionClosedHandler
* drogon::AsyncTask and drogon::Task<T> as our corutine types
* Related tests
* Misc
Future work
* Coroutine for WebSocket server
* Known issues
co_future() and sync_wait may crash. It looks like GCC bug but I'm not sure.
Workarround: Make an coroutine of AsyncTask. Then launch said coroutine.
Not sure why wrapping the exact same thing in function crashes things.
Co-authored-by: an-tao <antao2002@gmail.com>
* Standardize Row and Result api, throw specific exceptions
* Fix drogon_ctl for sqlite3 models
* Add mysql and sqlite3 tests, add exception throwing tests
* configure mysql in travis-ci
Co-authored-by: antao <antao2002@gmail.com>
* Add the ability to create restful API controllers
* Update the model.json template file
* Modify the 'create controller' command of the drogon_ctl
* access column values by column array indexes instead of column names when constructing an instance of a model class
* Fix a bug of mysql database
* Add some static SQL into models
* Add validations to models
* Add setToNull method to models
* Support 'where in' substatement
* Delay rendering from json to the response body. This allows users to modify the json object before sending a response.
* Add synchronous method to the HttpClient class