Giter Site home page Giter Site logo

New function `emacsql-async` about emacsql HOT 2 OPEN

magit avatar magit commented on June 9, 2024
New function `emacsql-async`

from emacsql.

Comments (2)

skeeto avatar skeeto commented on June 9, 2024 1

from emacsql.

nbfalcon avatar nbfalcon commented on June 9, 2024

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 a callbacks fifo-queue field. emacsql-async would push a handler to the end of it (e.g. using nconc) 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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.