I can assure you my query returns multiple rows which I why I then iterate around the result set and pass to conn.Write in a loop...I am aware of QueryRow and use it elsewhere...but agreed I should perhaps RTFM a bit more thanks !!
On Sunday, September 13, 2020 at 10:49:57 AM UTC+1 mb0 wrote: > sorry Andy, > > it seems i haven't read your example carefully enough. your question was > what to do if the query returns multiple rows. i tried to explain that. > > however the query in your example looks like it will only ever return a > single row, because you probably marked the username column in your > users table as unique. for that use QueryRow, which is just a convenient > wrapper function for querying a single result row. > > you can discover this fact through the documentation. in > https://godoc.org/database/sql#Row you can click on the Scan method name > link to get to the source code of that method > https://golang.org/src/database/sql/sql.go#L3196 and see how it uses > Rows to scan a single result or return the ErrNoRows. > > both documentation and source code of the standard library are easy to > discover and read compared to most other languages. i hope this tip > might help you answer other questions yourself as well. > > have fun! > > On 13.09.20 10:19, Andy Hall wrote: > > thanks martin...it seems with no query handling the database Next func > > does not run anyway as the rows evaluate to false in the for loop... > > > > // tell other players in the room you have entered > > rows_users, err := database.Query("SELECT username FROM users WHERE room > > = ? AND username != ?", room, username) > > // if the user from the db is connected then send them a message > > var user string > > for rows_users.Next() { > > rows_users.Scan(&user) > > if conn, ok := m[user]; ok { > > conn.Write([]byte(string(username + " has entered the room\n# "))) > > } > > } > > > > I should probably print something in the loop to confirm but I certainly > > don't get any null pointer connection errors so may just comment this > > for clarity and leave it. I guess it saves more code ;-) > > > > On Saturday, September 12, 2020 at 9:53:28 PM UTC+1 mb0 wrote: > > > > hi Andy, > > > > when you take a look at the documentation of the Rows type returned by > > Query you will see a helpful example of its common use, appending the > > scanned results into a slice. my recommendation would be to follow this > > example and then check if the len(slice) == 0 to detect an empty set. > > > > if you don't actually need the results scanned into a go slice, > > consider > > using query row with a sql select count(*) … query and scan, then check > > the resulting integer. > > > > have fun! > > > > On 12.09.20 21:16, Andy Hall wrote: > > > the database.Query func does not return ErrNoRows unlike the > > > database.QueryRow func so how to I handle an empty set when I > > wish to > > > run a query which returns multiple rows... > > > > > > // tell other players in the room you have entered > > > rows_users, err := database.Query("SELECT username FROM users > > WHERE room > > > = ? AND username != ?", room, username) > > > // handle an empty set > > > if err != nil { > > > if err == sql.ErrNoRows { > > > fmt.Println("EMPTY SET") > > > } else { > > > fmt.Println(err) > > > return > > > } > > > > > > The string "EMPTY SET" is never printed as the condition is never > > > set...so continues to run through the if statement. > > > > > > Surely there is is way to handle no rows with Query ?? > > > > > > -- > > > You received this message because you are subscribed to the Google > > > Groups "golang-nuts" group. > > > To unsubscribe from this group and stop receiving emails from it, > > send > > > an email to golang-nuts...@googlegroups.com > > > <mailto:golang-nuts...@googlegroups.com>. > > > To view this discussion on the web visit > > > > > > https://groups.google.com/d/msgid/golang-nuts/6d6c7d54-1a4b-4f07-bf22-8523045ce543n%40googlegroups.com > > > > > > > < > https://groups.google.com/d/msgid/golang-nuts/6d6c7d54-1a4b-4f07-bf22-8523045ce543n%40googlegroups.com?utm_medium=email&utm_source=footer > >. > > > > > > -- > > You received this message because you are subscribed to the Google > > Groups "golang-nuts" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to golang-nuts...@googlegroups.com > > <mailto:golang-nuts...@googlegroups.com>. > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/golang-nuts/0a03fd9c-b614-49ee-9d07-a7f44299fd7en%40googlegroups.com > > > < > https://groups.google.com/d/msgid/golang-nuts/0a03fd9c-b614-49ee-9d07-a7f44299fd7en%40googlegroups.com?utm_medium=email&utm_source=footer > >. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/5e8e5eaf-c4c0-41f1-af10-974b96ba5ec0n%40googlegroups.com.