Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace InsertedIDResultSetHandler with (built-in) ScalarHandler #23

Open
eepstein opened this issue Feb 16, 2015 · 5 comments
Open

Replace InsertedIDResultSetHandler with (built-in) ScalarHandler #23

eepstein opened this issue Feb 16, 2015 · 5 comments

Comments

@eepstein
Copy link
Contributor

ScalarHandler is generic, built-in, already in use, and more robust - not limited to one type. Common case to have INT generated primary keys, so the custom class is brittle.

@timmolter
Copy link
Member

So if I understand this correctly, you would want to pass in Integer or Long (or even String?) to the insert method and not be forced to receive a Long?

@eepstein
Copy link
Contributor Author

Sort of. But no need for the type explicitly, it is inferred:

public static <R> R insert(String poolName, String sql, Object[] params) {
    try {
        return new QueryRunner(getDataSource(poolName)).insert(sql, new ScalarHandler<>(), params);
    } catch (SQLException e) {
        throw new WrappedSqlException("Error inserting: " + sql, e);
    }
}

Of course, that’s using 1.7 type erasure, but the essence of the code works in 1.5 (and hence 1.6) too, just need a cast (and perhaps a @SuppressWarnings(“unchecked”)

On Feb 16, 2015, at 10:01 AM, Tim Molter notifications@github.com wrote:

So if I understand this correctly, you would want to pass in Integer or Long (or even String?) to the insert method and not be forced to receive a Long?


Reply to this email directly or view it on GitHub #23 (comment).

@timmolter
Copy link
Member

Thanks. I tried this, but using ScalarHandler, I cannot guarantee which type is returned (int, long) and the cast can go wrong, ending up with a java.lang.ClassCastException. My InsertedIDResultSetHandler forces it to always be a long.

@eepstein
Copy link
Contributor Author

Presumably of I created the class that's being inserted I'd also know what type to expect for the ID. And if I ain't sure I can also introspect the type.

Flexibility = power.

Rigidity => brittleness and unnecessary limitation.

On Aug 4, 2016, at 2:13 AM, Tim Molter notifications@github.com wrote:

Thanks. I tried this, but using ScalarHandler, I cannot guarantee which type is returned (int, long) and the cast can go wrong, ending up with a java.lang.ClassCastException. My InsertedIDResultSetHandler forces it to always be a long.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@timmolter
Copy link
Member

OK, so your idea was to have the client make the call what type it should be. That makes sense, but I'll need to look at it again to see how to do it. I'll reopen it.

@timmolter timmolter reopened this Aug 29, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants