Giter VIP home page Giter VIP logo

Comments (6)

Tapac avatar Tapac commented on May 16, 2024

Maybe something like this can help:

fun UpdateBuilder<*>.assign(o: JsonObject) {
    val cols = targets.first().columns
    for (col in cols) {
        var type = col.columnType.sqlType()
        val idx = type.indexOfAny(listOf(" ", "("))
        type = if (idx > 0) type.substring(0, idx) else type
        if (o.containsKey(col.name)) {
            if (col.name == "hashedPassword") {
                val p = o.getString("hashedPassword")
                o.put("hashedPassword", createHashString(p))
            }
            when (type) {
                "INT" -> set(col, o.getInteger(col.name))
                "VARCHAR" -> set(col, o.getString(col.name))
                "DATE" -> set(col, formateDate(o.getString(col.name)))
                "DECIMAL" -> set(col, o.getDouble(col.name))
            }
        }
    }
}

from exposed.

chenzhendong avatar chenzhendong commented on May 16, 2024

test your code but failed to compile on 4 set method

[ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.0.5:compile (compile) on project capamc-web: Compilation failure: Compilation failure:
[ERROR] Dao.kt:[67,30] Type inference failed: Cannot infer type parameter S in operator fun set(column: Column, value: S?): Unit
[ERROR] None of the following substitutions
[ERROR] (Column<CapturedTypeConstructor()>,CapturedTypeConstructor()?)
[ERROR] (Column,Int?)
[ERROR] can be applied to
[ERROR] (Column<*>,Int!)

from exposed.

Tapac avatar Tapac commented on May 16, 2024

You should cast col to same type as you want to set, e.g.

"INT" -> set(col as Column<Int>, o.getInteger(col.name))

from exposed.

chenzhendong avatar chenzhendong commented on May 16, 2024

Thanks for a quick response.
I try change my code from assign(it, json) to it.assign(json) style but it won't compile.
I think it might cause by you define a static method, and "it" is a instance. Any way to get it work? Could we use reflection to call a static method from a instance?

from exposed.

Tapac avatar Tapac commented on May 16, 2024

I'm not sure that I've understand your problem, but that code compiles just fine:

fun <T:Any> UpdateBuilder<*>.set(col: Column<*>, value: T?) = set(col as Column<T>, value)

fun UpdateBuilder<*>.assign(o: JsonObject) {
    val cols = targets.first().columns
    for (col in cols) {
        var type = col.columnType.sqlType()
        val idx = type.indexOfAny(listOf(" ", "("))
        type = if (idx > 0) type.substring(0, idx) else type
        if (o.containsKey(col.name)) {
            if (col.name == "hashedPassword") {
                val p = o.getString("hashedPassword")
                o.put("hashedPassword", p?.hashCode()?.toString())
            }
            when (type) {
                "INT" -> set(col, o.getInteger(col.name))
                "VARCHAR" -> set(col, o.getString(col.name))
                "DECIMAL" -> set(col, o.getDouble(col.name))
            }
        }
    }
}

fun usageExample() {
    val table = object : IntIdTable() {
        val foo = text("foo")
        val bar = integer("bar")
    }
    
    table.insert { 
        it[table.foo] = "text"
        it.assign(JsonObject())
    }

    table.update(where = { table.foo eq "text"}){
        it[table.foo] = "text2"
        it.assign(JsonObject())
    }
}

from exposed.

chenzhendong avatar chenzhendong commented on May 16, 2024

Works to me now, some silly typo error. Thanks a lot

from exposed.

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.