Comments (6)
It seems like you've done 99% of the work for a test case, can you be so very kind as to recast this as one? I'd really appreciate it. It probably belongs in encode_test.go
.
from pq.
So this blows up in interesting ways:
func TestOneRow(t *testing.T) {
db := openTestConn(t)
defer db.Close()
r, err := db.Query("SELECT '2000-01-01T00:00:00'::timestamp")
if err != nil {
t.Fatalf("Could not run query: ", err)
}
rowCount := 0
for r.Next() {
rowCount += 1
}
if rowCount != 1 {
t.Fatalf("Expected exactly one row, but got %v", rowCount)
}
}
Yielding
encode_test.go:107: Expected exactly one row, but got 0
Also interesting:
func TestTimestampWithOutTimezone(t *testing.T) {
db := openTestConn(t)
defer db.Close()
r, err := db.Query("SELECT '2000-01-01T00:00:00'::timestamp")
if err != nil {
t.Fatalf("Could not run query: ", err)
}
n := r.Next()
// Elided to continue the test and see something interesting.
//
// if n != true {
// t.Fatal("Expected at least one row")
// }
var result time.Time
err = r.Scan(&result)
if err != nil {
t.Fatalf("Did not expect error scanning row: %v", err)
}
expected, err := time.Parse(time.RFC3339, "2000-01-01T00:00:00Z")
if err != nil {
t.Fatalf("Could not parse test time literal: %v", err)
}
if !result.Equal(expected) {
t.Fatalf("Expected time to match %v: got mismatch %v",
expected, result)
}
n = r.Next()
if n != false {
t.Fatal("Expected only one row")
}
}
In the above, r.Next()
is broken, but we avoid checking it for the sake of experimentation. Continuing the test results in:
encode_test.go:131: Did not expect error scanning row: pq: decode: parsing time "2000-01-01 00:00:00" as "2006-01-02 15:04:05:00": cannot parse "" as ":00"
To make things slightly worse, it doesn't seem that Go has a very good notion of "no known location" for its time type. Although such unadorned timestamps make me unhappy in general, the fact is they are out there, and it seems that the Go standard library has ignored their existence. The most obvious ugly thing to do is to pretend that such timestamps have come from UTC, even though that's an overconfident lie. I have not ascertained if there is a better "pseudo-location" that just means "I have no idea what the timezone is", nor do I see a good way to define one in the Go time
package.
I may have to convert Postgres timestamp
to a string
and leave it to the user, for the most pedantic of all interpretations, and hope people just switch to timestamptz
(they should) instead.
from pq.
I think a fix for this is in 7f1933f.
The error reporting seems pretty weird when decode
has an error, but I think this should help you. If not, reopen.
from pq.
old style '2013-01-04 20:14:58.80033' broken now. It imports new bug.
from pq.
Reverted. 2224d83
It regresses on go 1.0.2; on the 'devel' version it seems to work. What it does on 1.0.3 is yet unknown to me.
from pq.
I have committed a new version, 284a1d4.
This time, I have tested it on Go 1.0.2 on Ubuntu Quantal and Go 1.0.3 on my Macintosh, and whereas the old patch causes a regression in the 1.0.2 copy, this version does not.
from pq.
Related Issues (20)
- Tx.Rollback returns ErrBadConn after context is cancelled
- Connection string parsing fails randomly HOT 2
- 1 Listener for 2 channel HOT 1
- SonarCloud Vulnerability: Make sure this PostgreSQL database password gets changed and removed from the code.
- Usage of COPY TO STDOUT WITH CSV
- RFC 9266: Channel Bindings for TLS 1.3 support
- Query extra_float_digits problem
- Is Postgres15.4 is compatible with the lib/pq package?
- What kind of mistake is this?
- how to deal with "cached plan must not change result type" error?
- Looking for a security contact to disclose a vulnerability HOT 1
- Exectuing pq.CopyIn fails with one of two errors depending on usage
- Why do I have errors in local language?
- pq: invalid array literal.
- pq: invalid input syntax for type integer HOT 2
- Private keys cause Trivy HIGH vulnerability alerts HOT 4
- Nil byte array doesn't get saved as JSONB field
- nil byte array `[]byte(nil)` is encoded as empty byte array `[]byte([])` instead of nil
- Extra DNS name verification is made in `verify-ca` mode, making it effectively `verify-full` HOT 1
- Got error pq: syntax error at the end of ... when doing custom dialer
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 pq.