Git Product home page Git Product logo

Comments (6)

csummers avatar csummers commented on July 17, 2024 4

@simax Good question. We don't have built-in support in HugSQL for snake/kebab/camel conversion, but we do have some tools enabling you to easily hook into the returned results in the form of the hugsql.core/hugsql-result-fn multi-method.

You can create your own result types OR override the existing ones. For example, here's how you would override the result type for :1, which returns a single hashmap. You would need to override all of the result types that might contain hashmaps with keys to be converted. So, for builtin result types, this would include :1, :one, :*, and :many.

(defn result-one-snake->kebab
  [this result options]
  (->> (hugsql.adapter/result-one this result options)
       (csk-extras/transform-keys csk/->kebab-case-keyword)))

(defmethod hugsql.core/hugsql-result-fn :1 [sym] 'hugsql.core-test/result-one-snake->kebab)

Notice that the multi-method points to a quoted, fully-namespace-qualified function (this one I tested out briefly in my test namespace). That's the answer for results coming back from the database.

For identifiers (table names and column names), you can do a similar process by overriding the hugsql.parameters/apply-hugsql-param multi-method for identifier parameter types: :i, :identifier, :i*, and :identifier*.

At this point, I think I'd like to let these hooks be the "solution" for this problem. If I get a significant amount of requests for this feature, I would look at building it in.

from hugsql.

simax avatar simax commented on July 17, 2024

Interesting. I'll have a play around with your suggestions, they sound promising. Thanks for the advice and hugsql.

from hugsql.

csummers avatar csummers commented on July 17, 2024

You're welcome! Let me know if you run into any further issues or questions. I very much want to make HugSQL a robust, practical solution for lots of use cases.

from hugsql.

alndvz avatar alndvz commented on July 17, 2024

I've taken the advice above, however when passing in kebab case params and using snake params in my SQL hugsql.core/validate-parameters! throws an exception. Is there a way to modify the params before they got to this function? It seems the apply-hugsql-param multimethod is executed after this validation function. Am I missing something?

from hugsql.

jgrodziski avatar jgrodziski commented on July 17, 2024

I've put a very first draft of a core.async version of your function for those using postgres.async with hugsql adapter:
https://gist.github.com/jgrodziski/d1af3999c82d048f208698ae4c7ab819

from hugsql.

nackjicholson avatar nackjicholson commented on July 17, 2024

https://luminusweb.com/docs/database.html#massaging_key_names_from_sql_to_clojure_style

This section of the luminus documentation has a description of how to convert keys. Pasting here because I ran across it, but I think I'm going to use :snake_case keywords everywhere.

from hugsql.

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.