Comments (2)
from emacsql.
I was also thinking about adding an async interface, since I don't like forge
hanging when invoking forge-pull
. I propose the following (and am willing to implement that if you agree with my proposal @skeeto):
- Requests would be processed in-order: each request has to finish before the next is even processed. This avoids edge cases like reads completing before writes (i.e. implied r/w barriers after every op) and greatly simplifies the implementation, since we don't have to specify sequence numbers with each request
emacs-sql-connection
would be extended with acallbacks
fifo-queue field.emacsql-async
would push a handler to the end of it (e.g. usingnconc
) and then send the request to the process.emacsql
would do the same, but then spin around waiting until its callback is invoked. This is necessary as its result is available only once all callbacks before it have been invoked. Each callback would take a boolean indicating whether its data argument is an error or not and a data argument, the response (inspired by nodejs' `readFileAsync).emacsql-waiting-p
can no longer assume that the process buffer can have only one result (so checking the last two chars of it for "#\n" is no longer sufficient), but must instead check if there is one result available, ignoring everything afterwards (which might be a partial result or even a full one)emacsql-read
also has to handle multiple results- a process filter would be added that calls
emacsql-waiting-p
after each input, and dispatches the first callback if necessary. For the sqlite backend, this means checking for a newline in the process buffer - (as an optimization) there could be per-backend process filters that can e.g. check for newlines in only the new output, and increase a count of available results. This means that less data has to be looked at after each output write (compared to searching for a newline from the beginning of the buffer each time).
There might be more complexity involved in making this work for pgsql
, though.
Any thoughts?
from emacsql.
Related Issues (20)
- Comma syntax / How to use :set for multiple columns? HOT 1
- Test failure in emacsql-nul-character on Emacs 25 HOT 1
- MELPA recipe fails without "next" branch HOT 2
- "apply: Selecting deleted buffer" when opening a magit buffer (with forge installed) HOT 5
- Can't get past `(invalid-read-syntax "#" 37 73)` HOT 5
- magit-status initially fails with "process emacsql-sqlite no longer connected to pipe; closed it" HOT 4
- emacsql error on install with use package from melpa: Symbol’s value as variable is void: emacsql-sqlite-reserved HOT 5
- Test all back-ends HOT 3
- SQLite binary fails to compile (via spacemacs/magit/forge) HOT 1
- Missing sqlite subdirecotory in melpa HOT 3
- emacsql-process does not return a process on the built-in connection HOT 2
- Preparing to release 4.0.0 HOT 10
- does :with :as :values work? HOT 1
- Incorrect argument to malloc HOT 2
- Timeout trying to open sqlite db on m1 Mac HOT 3
- how to query based on time-stamp? HOT 1
- emacsql-sqlite failing (timeout, still running) on OS X (Big Sur) HOT 14
- 'No EmacSQL SQLite binary available, aborting' after building from master HOT 1
- Update vendored SQLite HOT 2
- "url" and "url-http" seem never used in emacsql-sqlite.el
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from emacsql.