gopkg.in/rethinkdb/rethinkdb-go.v6@v6.2.2/internal/integration/tests/query_test.go (about) 1 package tests 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "sync" 7 "testing" 8 "time" 9 10 test "gopkg.in/check.v1" 11 r "gopkg.in/rethinkdb/rethinkdb-go.v6" 12 ) 13 14 func (s *RethinkSuite) TestQueryRun(c *test.C) { 15 var response string 16 17 res, err := r.Expr("Test").Run(session) 18 c.Assert(err, test.IsNil) 19 20 err = res.One(&response) 21 22 c.Assert(err, test.IsNil) 23 c.Assert(response, test.Equals, "Test") 24 } 25 26 func (s *RethinkSuite) TestQueryReadOne(c *test.C) { 27 var response string 28 29 err := r.Expr("Test").ReadOne(&response, session) 30 c.Assert(err, test.IsNil) 31 c.Assert(response, test.Equals, "Test") 32 } 33 34 func (s *RethinkSuite) TestQueryReadAll(c *test.C) { 35 var response []int 36 37 err := r.Expr([]int{1, 2, 3}).ReadAll(&response, session) 38 c.Assert(err, test.IsNil) 39 c.Assert(response, test.HasLen, 3) 40 c.Assert(response, test.DeepEquals, []int{1, 2, 3}) 41 } 42 43 func (s *RethinkSuite) TestQueryExec(c *test.C) { 44 err := r.Expr("Test").Exec(session) 45 c.Assert(err, test.IsNil) 46 } 47 48 func (s *RethinkSuite) TestQueryRunWrite(c *test.C) { 49 r.DBDrop("test_runwrite").Exec(session) 50 err := r.DBCreate("test_runwrite").Exec(session) 51 c.Assert(err, test.IsNil) 52 err = r.DB("test_runwrite").TableCreate("test_runwrite").Exec(session) 53 c.Assert(err, test.IsNil) 54 err = r.DB("test_runwrite").Table("test_runwrite").Wait().Exec(session) 55 c.Assert(err, test.IsNil) 56 57 query := r.DB("test_runwrite").Table("test_runwrite").Insert([]interface{}{ 58 map[string]interface{}{"num": 1}, 59 map[string]interface{}{"num": 2}, 60 }, r.InsertOpts{ReturnChanges: true}) 61 res, err := query.RunWrite(session) 62 c.Assert(err, test.IsNil) 63 c.Assert(res.Inserted, test.Equals, 2) 64 c.Assert(len(res.Changes), test.Equals, 2) 65 } 66 67 func (s *RethinkSuite) TestQueryProfile(c *test.C) { 68 var response string 69 70 res, err := r.Expr("Test").Run(session, r.RunOpts{ 71 Profile: true, 72 }) 73 c.Assert(err, test.IsNil) 74 75 err = res.One(&response) 76 77 c.Assert(err, test.IsNil) 78 c.Assert(res.Profile(), test.NotNil) 79 c.Assert(response, test.Equals, "Test") 80 } 81 82 func (s *RethinkSuite) TestQueryRunRawTime(c *test.C) { 83 var response map[string]interface{} 84 85 res, err := r.Now().Run(session, r.RunOpts{ 86 TimeFormat: "raw", 87 }) 88 c.Assert(err, test.IsNil) 89 90 err = res.One(&response) 91 92 c.Assert(err, test.IsNil) 93 c.Assert(response["$reql_type$"], test.NotNil) 94 c.Assert(response["$reql_type$"], test.Equals, "TIME") 95 } 96 97 func (s *RethinkSuite) TestQueryRunNil(c *test.C) { 98 res, err := r.Expr("Test").Run(nil) 99 c.Assert(res, test.IsNil) 100 c.Assert(err, test.NotNil) 101 c.Assert(err, test.Equals, r.ErrConnectionClosed) 102 } 103 104 func (s *RethinkSuite) TestQueryRunNotConnected(c *test.C) { 105 res, err := r.Expr("Test").Run(&r.Session{}) 106 c.Assert(res, test.IsNil) 107 c.Assert(err, test.NotNil) 108 c.Assert(err, test.Equals, r.ErrConnectionClosed) 109 } 110 111 func (s *RethinkSuite) TestControlExprNil(c *test.C) { 112 var response interface{} 113 query := r.Expr(nil) 114 res, err := query.Run(session) 115 c.Assert(err, test.IsNil) 116 117 err = res.One(&response) 118 119 c.Assert(err, test.Equals, r.ErrEmptyResult) 120 c.Assert(response, test.Equals, nil) 121 } 122 123 func (s *RethinkSuite) TestControlExprSimple(c *test.C) { 124 var response int 125 query := r.Expr(1) 126 res, err := query.Run(session) 127 c.Assert(err, test.IsNil) 128 129 err = res.One(&response) 130 131 c.Assert(err, test.IsNil) 132 c.Assert(response, test.Equals, 1) 133 } 134 135 func (s *RethinkSuite) TestControlExprList(c *test.C) { 136 var response []interface{} 137 query := r.Expr(narr) 138 res, err := query.Run(session) 139 c.Assert(err, test.IsNil) 140 141 err = res.All(&response) 142 143 c.Assert(err, test.IsNil) 144 c.Assert(response, JsonEquals, []interface{}{ 145 1, 2, 3, 4, 5, 6, []interface{}{ 146 7.1, 7.2, 7.3, 147 }, 148 }) 149 } 150 151 func (s *RethinkSuite) TestControlExprObj(c *test.C) { 152 var response map[string]interface{} 153 query := r.Expr(nobj) 154 res, err := query.Run(session) 155 c.Assert(err, test.IsNil) 156 157 err = res.One(&response) 158 159 c.Assert(err, test.IsNil) 160 c.Assert(response, JsonEquals, map[string]interface{}{ 161 "A": 1, 162 "B": 2, 163 "C": map[string]interface{}{ 164 "1": 3, 165 "2": 4, 166 }, 167 }) 168 } 169 170 func (s *RethinkSuite) TestControlStruct(c *test.C) { 171 var response map[string]interface{} 172 query := r.Expr(str) 173 res, err := query.Run(session) 174 c.Assert(err, test.IsNil) 175 176 err = res.One(&response) 177 178 c.Assert(err, test.IsNil) 179 c.Assert(response, JsonEquals, map[string]interface{}{ 180 "id": "A", 181 "B": 1, 182 "D": map[string]interface{}{"D2": "2", "D1": 1}, 183 "E": []interface{}{"E1", "E2", "E3", 4}, 184 "F": map[string]interface{}{ 185 "XA": 2, 186 "XB": "B", 187 "XC": []interface{}{"XC1", "XC2"}, 188 "XD": map[string]interface{}{ 189 "YA": 3, 190 "YB": map[string]interface{}{ 191 "1": "1", 192 "2": "2", 193 "3": 3, 194 }, 195 "YC": map[string]interface{}{ 196 "YC1": "YC1", 197 }, 198 "YD": map[string]interface{}{ 199 "YD1": "YD1", 200 }, 201 }, 202 "XE": "XE", 203 "XF": []interface{}{"XE1", "XE2"}, 204 }, 205 }) 206 } 207 208 func (s *RethinkSuite) TestControlStructTags(c *test.C) { 209 r.SetTags("rethinkdb", "json") 210 defer r.SetTags() 211 212 var response map[string]interface{} 213 query := r.Expr(TagsTest{"1", "2", "3"}) 214 res, err := query.Run(session) 215 c.Assert(err, test.IsNil) 216 217 err = res.One(&response) 218 219 c.Assert(err, test.IsNil) 220 c.Assert(response, JsonEquals, map[string]interface{}{ 221 "a": "1", "b": "2", "c1": "3", 222 }) 223 224 } 225 226 func (s *RethinkSuite) TestControlMapTypeAlias(c *test.C) { 227 var response TMap 228 query := r.Expr(TMap{"A": 1, "B": 2}) 229 res, err := query.Run(session) 230 c.Assert(err, test.IsNil) 231 232 err = res.One(&response) 233 234 c.Assert(err, test.IsNil) 235 c.Assert(response, JsonEquals, TMap{"A": 1, "B": 2}) 236 } 237 238 func (s *RethinkSuite) TestControlStringTypeAlias(c *test.C) { 239 var response TStr 240 query := r.Expr(TStr("Hello")) 241 res, err := query.Run(session) 242 c.Assert(err, test.IsNil) 243 244 err = res.One(&response) 245 246 c.Assert(err, test.IsNil) 247 c.Assert(response, JsonEquals, TStr("Hello")) 248 } 249 250 func (s *RethinkSuite) TestControlExprTypes(c *test.C) { 251 var response []interface{} 252 query := r.Expr([]interface{}{int64(1), uint64(1), float64(1.0), int32(1), uint32(1), float32(1), "1", true, false}) 253 res, err := query.Run(session) 254 c.Assert(err, test.IsNil) 255 256 err = res.All(&response) 257 258 c.Assert(err, test.IsNil) 259 c.Assert(response, JsonEquals, []interface{}{int64(1), uint64(1), float64(1.0), int32(1), uint32(1), float32(1), "1", true, false}) 260 } 261 262 func (s *RethinkSuite) TestControlJs(c *test.C) { 263 var response int 264 query := r.JS("1;") 265 res, err := query.Run(session) 266 c.Assert(err, test.IsNil) 267 268 err = res.One(&response) 269 270 c.Assert(err, test.IsNil) 271 c.Assert(response, test.Equals, 1) 272 } 273 274 func (s *RethinkSuite) TestControlHttp(c *test.C) { 275 if testing.Short() { 276 c.Skip("-short set") 277 } 278 279 var response map[string]interface{} 280 query := r.HTTP("httpbin.org/get?data=1") 281 res, err := query.Run(session) 282 c.Assert(err, test.IsNil) 283 284 err = res.One(&response) 285 286 c.Assert(err, test.IsNil) 287 c.Assert(response["args"], JsonEquals, map[string]interface{}{ 288 "data": "1", 289 }) 290 } 291 292 func (s *RethinkSuite) TestControlError(c *test.C) { 293 query := r.Error("An error occurred") 294 err := query.Exec(session) 295 c.Assert(err, test.NotNil) 296 297 c.Assert(err, test.NotNil) 298 c.Assert(err, test.FitsTypeOf, r.RQLUserError{}) 299 300 c.Assert(err.Error(), test.Equals, "rethinkdb: An error occurred in:\nr.Error(\"An error occurred\")") 301 } 302 303 func (s *RethinkSuite) TestControlDoNothing(c *test.C) { 304 var response []interface{} 305 query := r.Do([]interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"a": 2}, map[string]interface{}{"a": 3}}) 306 res, err := query.Run(session) 307 c.Assert(err, test.IsNil) 308 309 err = res.All(&response) 310 311 c.Assert(err, test.IsNil) 312 c.Assert(response, JsonEquals, []interface{}{map[string]interface{}{"a": 1}, map[string]interface{}{"a": 2}, map[string]interface{}{"a": 3}}) 313 } 314 315 func (s *RethinkSuite) TestControlArgs(c *test.C) { 316 var response time.Time 317 query := r.Time(r.Args(r.Expr([]interface{}{2014, 7, 12, "Z"}))) 318 res, err := query.Run(session) 319 c.Assert(err, test.IsNil) 320 321 err = res.One(&response) 322 c.Assert(err, test.IsNil) 323 c.Assert(response.Unix(), test.Equals, int64(1405123200)) 324 } 325 326 func (s *RethinkSuite) TestControlBinaryByteArray(c *test.C) { 327 var response []byte 328 329 query := r.Binary([]byte("Hello World")) 330 res, err := query.Run(session) 331 c.Assert(err, test.IsNil) 332 333 err = res.One(&response) 334 c.Assert(err, test.IsNil) 335 c.Assert(bytes.Equal(response, []byte("Hello World")), test.Equals, true) 336 } 337 338 type byteArray []byte 339 340 func (s *RethinkSuite) TestControlBinaryByteArrayAlias(c *test.C) { 341 var response []byte 342 343 query := r.Binary(byteArray("Hello World")) 344 res, err := query.Run(session) 345 c.Assert(err, test.IsNil) 346 347 err = res.One(&response) 348 c.Assert(err, test.IsNil) 349 c.Assert(bytes.Equal(response, []byte("Hello World")), test.Equals, true) 350 } 351 352 func (s *RethinkSuite) TestControlBinaryByteSlice(c *test.C) { 353 var response [5]byte 354 355 query := r.Binary([5]byte{'h', 'e', 'l', 'l', 'o'}) 356 res, err := query.Run(session) 357 c.Assert(err, test.IsNil) 358 359 err = res.One(&response) 360 c.Assert(err, test.IsNil) 361 c.Assert(response, test.Equals, [5]byte{'h', 'e', 'l', 'l', 'o'}) 362 } 363 364 func (s *RethinkSuite) TestControlBinaryExpr(c *test.C) { 365 var response []byte 366 367 query := r.Expr([]byte("Hello World")) 368 res, err := query.Run(session) 369 c.Assert(err, test.IsNil) 370 371 err = res.One(&response) 372 c.Assert(err, test.IsNil) 373 c.Assert(bytes.Equal(response, []byte("Hello World")), test.Equals, true) 374 } 375 376 func (s *RethinkSuite) TestControlBinaryExprAlias(c *test.C) { 377 var response []byte 378 379 query := r.Expr(byteArray("Hello World")) 380 res, err := query.Run(session) 381 c.Assert(err, test.IsNil) 382 383 err = res.One(&response) 384 c.Assert(err, test.IsNil) 385 c.Assert(bytes.Equal(response, []byte("Hello World")), test.Equals, true) 386 } 387 388 func (s *RethinkSuite) TestControlBinaryTerm(c *test.C) { 389 var response []byte 390 391 query := r.Binary(r.Expr([]byte("Hello World"))) 392 res, err := query.Run(session) 393 c.Assert(err, test.IsNil) 394 395 err = res.One(&response) 396 c.Assert(err, test.IsNil) 397 c.Assert(bytes.Equal(response, []byte("Hello World")), test.Equals, true) 398 } 399 400 func (s *RethinkSuite) TestControlBinaryElemTerm(c *test.C) { 401 var response map[string]interface{} 402 403 query := r.Expr(map[string]interface{}{ 404 "bytes": []byte("Hello World"), 405 }) 406 res, err := query.Run(session) 407 c.Assert(err, test.IsNil) 408 409 err = res.One(&response) 410 c.Assert(err, test.IsNil) 411 c.Assert(bytes.Equal(response["bytes"].([]byte), []byte("Hello World")), test.Equals, true) 412 } 413 414 func (s *RethinkSuite) TestExprInvalidType(c *test.C) { 415 query := r.Expr(map[struct{ string }]string{}) 416 _, err := query.Run(session) 417 c.Assert(err, test.NotNil) 418 } 419 420 func (s *RethinkSuite) TestRawQuery(c *test.C) { 421 var response int 422 query := r.RawQuery([]byte(`1`)) 423 res, err := query.Run(session) 424 c.Assert(err, test.IsNil) 425 426 err = res.One(&response) 427 428 c.Assert(err, test.IsNil) 429 c.Assert(response, test.Equals, 1) 430 } 431 432 func (s *RethinkSuite) TestRawQuery_advanced(c *test.C) { 433 var response []int 434 // r.expr([1,2,3]).map(function(v) { return v.add(1)}) 435 query := r.RawQuery([]byte(`[38,[[2,[1,2,3]],[69,[[2,[25]],[24,[[10,[25]],1]]]]]]`)) 436 res, err := query.Run(session) 437 c.Assert(err, test.IsNil) 438 439 err = res.All(&response) 440 441 c.Assert(err, test.IsNil) 442 c.Assert(response, JsonEquals, []int{2, 3, 4}) 443 } 444 445 func (s *RethinkSuite) TestTableChanges(c *test.C) { 446 r.DB("test").TableDrop("changes1").Exec(session) 447 r.DB("test").TableCreate("changes1").Exec(session) 448 r.DB("test").Table("changes1").Wait().Exec(session) 449 450 var n int 451 452 res, err := r.DB("test").Table("changes1").Changes().Run(session) 453 if err != nil { 454 c.Fatal(err.Error()) 455 } 456 c.Assert(res.Type(), test.Equals, "Feed") 457 458 wg := &sync.WaitGroup{} 459 wg.Add(1) 460 461 // Use goroutine to wait for changes. Prints the first 10 results 462 go func() { 463 var response interface{} 464 for n < 10 && res.Next(&response) { 465 n++ 466 } 467 468 defer wg.Done() 469 if res.Err() != nil { 470 c.Fatal(res.Err()) 471 } 472 }() 473 474 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 1}).Exec(session) 475 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 2}).Exec(session) 476 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 3}).Exec(session) 477 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 4}).Exec(session) 478 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 5}).Exec(session) 479 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 6}).Exec(session) 480 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 7}).Exec(session) 481 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 8}).Exec(session) 482 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 9}).Exec(session) 483 r.DB("test").Table("changes1").Insert(map[string]interface{}{"n": 10}).Exec(session) 484 485 wg.Wait() 486 487 c.Assert(n, test.Equals, 10) 488 } 489 490 func (s *RethinkSuite) TestTableChangesExit(c *test.C) { 491 r.DB("test").TableDrop("changes2").Exec(session) 492 r.DB("test").TableCreate("changes2").Exec(session) 493 r.DB("test").Table("changes2").Wait().Exec(session) 494 495 var n int 496 497 res, err := r.DB("test").Table("changes2").Changes().Run(session) 498 if err != nil { 499 c.Fatal(err.Error()) 500 } 501 c.Assert(res.Type(), test.Equals, "Feed") 502 503 change := make(chan r.ChangeResponse) 504 505 // Close cursor after one second 506 go func() { 507 <-time.After(time.Second) 508 res.Close() 509 }() 510 511 // Insert 5 docs 512 r.DB("test").Table("changes2").Insert(map[string]interface{}{"n": 1}).Exec(session) 513 r.DB("test").Table("changes2").Insert(map[string]interface{}{"n": 2}).Exec(session) 514 r.DB("test").Table("changes2").Insert(map[string]interface{}{"n": 3}).Exec(session) 515 r.DB("test").Table("changes2").Insert(map[string]interface{}{"n": 4}).Exec(session) 516 r.DB("test").Table("changes2").Insert(map[string]interface{}{"n": 5}).Exec(session) 517 518 // Listen for changes 519 res.Listen(change) 520 for _ = range change { 521 n++ 522 } 523 524 c.Assert(n, test.Equals, 5) 525 } 526 527 func (s *RethinkSuite) TestTableChangesExitNoResults(c *test.C) { 528 r.DB("test").TableDrop("changes3").Exec(session) 529 r.DB("test").TableCreate("changes3").Exec(session) 530 r.DB("test").Table("changes3").Wait().Exec(session) 531 532 var n int 533 534 res, err := r.DB("test").Table("changes3").Changes().Run(session) 535 if err != nil { 536 c.Fatal(err.Error()) 537 } 538 c.Assert(res.Type(), test.Equals, "Feed") 539 540 change := make(chan r.ChangeResponse) 541 542 // Close cursor after one second 543 go func() { 544 <-time.After(time.Second) 545 res.Close() 546 }() 547 548 // Listen for changes 549 res.Listen(change) 550 for _ = range change { 551 n++ 552 } 553 554 c.Assert(n, test.Equals, 0) 555 } 556 557 func (s *RethinkSuite) TestTableChangesIncludeInitial(c *test.C) { 558 r.DB("test").TableDrop("changes4").Exec(session) 559 r.DB("test").TableCreate("changes4").Exec(session) 560 r.DB("test").Table("changes4").Wait().Exec(session) 561 562 // Insert 5 documents to table initially 563 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 1}).Exec(session) 564 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 2}).Exec(session) 565 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 3}).Exec(session) 566 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 4}).Exec(session) 567 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 5}).Exec(session) 568 569 var n int 570 571 res, err := r.DB("test").Table("changes4").Changes(r.ChangesOpts{IncludeInitial: true}).Run(session) 572 if err != nil { 573 c.Fatal(err.Error()) 574 } 575 c.Assert(res.Type(), test.Equals, "Feed") 576 577 wg := &sync.WaitGroup{} 578 wg.Add(1) 579 580 // Use goroutine to wait for changes. Prints the first 10 results 581 go func() { 582 var response interface{} 583 for n < 10 && res.Next(&response) { 584 n++ 585 } 586 587 defer wg.Done() 588 if res.Err() != nil { 589 c.Fatal(res.Err()) 590 } 591 }() 592 593 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 6}).Exec(session) 594 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 7}).Exec(session) 595 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 8}).Exec(session) 596 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 9}).Exec(session) 597 r.DB("test").Table("changes4").Insert(map[string]interface{}{"n": 10}).Exec(session) 598 599 wg.Wait() 600 601 c.Assert(n, test.Equals, 10) 602 } 603 604 func (s *RethinkSuite) TestWriteReference(c *test.C) { 605 author := Author{ 606 ID: "1", 607 Name: "JRR Tolkien", 608 } 609 610 book := Book{ 611 ID: "1", 612 Title: "The Lord of the Rings", 613 Author: author, 614 } 615 616 r.DB("test").TableDrop("authors").Exec(session) 617 r.DB("test").TableDrop("books").Exec(session) 618 r.DB("test").TableCreate("authors").Exec(session) 619 r.DB("test").TableCreate("books").Exec(session) 620 r.DB("test").Table("authors").Wait().Exec(session) 621 r.DB("test").Table("books").Wait().Exec(session) 622 623 _, err := r.DB("test").Table("authors").Insert(author).RunWrite(session) 624 c.Assert(err, test.IsNil) 625 626 _, err = r.DB("test").Table("books").Insert(book).RunWrite(session) 627 c.Assert(err, test.IsNil) 628 629 // Read back book + author and check result 630 cursor, err := r.DB("test").Table("books").Get("1").Merge(func(p r.Term) interface{} { 631 return map[string]interface{}{ 632 "author_id": r.DB("test").Table("authors").Get(p.Field("author_id")), 633 } 634 }).Run(session) 635 c.Assert(err, test.IsNil) 636 637 var out Book 638 err = cursor.One(&out) 639 c.Assert(err, test.IsNil) 640 641 c.Assert(out.Title, test.Equals, "The Lord of the Rings") 642 c.Assert(out.Author.Name, test.Equals, "JRR Tolkien") 643 } 644 645 func (s *RethinkSuite) TestWriteConflict(c *test.C) { 646 r.DB("test").TableDrop("test_write_conf").Exec(session) 647 r.DB("test").TableCreate("test_write_conf").Exec(session) 648 r.DB("test").Table("test_write_conf").Wait().Exec(session) 649 650 query := r.DB("test").Table("test_write_conf").Insert(map[string]interface{}{"id": "a"}) 651 _, err := query.RunWrite(session) 652 c.Assert(err, test.IsNil) 653 654 query = r.DB("test").Table("test_write_conf").Insert(map[string]interface{}{"id": "a"}) 655 _, err = query.RunWrite(session) 656 c.Assert(r.IsConflictErr(err), test.Equals, true) 657 } 658 659 func (s *RethinkSuite) TestTimeTime(c *test.C) { 660 var response time.Time 661 res, err := r.Time(1986, 11, 3, 12, 30, 15, "Z").Run(session) 662 c.Assert(err, test.IsNil) 663 664 err = res.One(&response) 665 c.Assert(err, test.IsNil) 666 c.Assert(response.Equal(time.Date(1986, 11, 3, 12, 30, 15, 0, time.UTC)), test.Equals, true) 667 } 668 669 func (s *RethinkSuite) TestTimeExpr(c *test.C) { 670 var response time.Time 671 t := time.Unix(531360000, 0) 672 res, err := r.Expr(r.Expr(t)).Run(session) 673 c.Assert(err, test.IsNil) 674 675 err = res.One(&response) 676 c.Assert(err, test.IsNil) 677 } 678 679 func (s *RethinkSuite) TestTimeExprMillisecond(c *test.C) { 680 var response time.Time 681 t := time.Unix(531360000, 679000000) 682 res, err := r.Expr(t).Run(session) 683 c.Assert(err, test.IsNil) 684 685 err = res.One(&response) 686 c.Assert(err, test.IsNil) 687 c.Assert(float64(response.UnixNano()), test.Equals, float64(t.UnixNano())) 688 } 689 690 func (s *RethinkSuite) TestTimeISO8601(c *test.C) { 691 var t1, t2 time.Time 692 t2, _ = time.Parse("2006-01-02T15:04:05-07:00", "1986-11-03T08:30:00-07:00") 693 res, err := r.ISO8601("1986-11-03T08:30:00-07:00").Run(session) 694 c.Assert(err, test.IsNil) 695 696 err = res.One(&t1) 697 c.Assert(err, test.IsNil) 698 c.Assert(t1.Equal(t2), test.Equals, true) 699 } 700 701 func (s *RethinkSuite) TestTimeInTimezone(c *test.C) { 702 var response []time.Time 703 res, err := r.Expr([]interface{}{r.Now(), r.Now().InTimezone("-07:00")}).Run(session) 704 c.Assert(err, test.IsNil) 705 706 err = res.All(&response) 707 c.Assert(err, test.IsNil) 708 c.Assert(response[1].Equal(response[0]), test.Equals, true) 709 } 710 711 func (s *RethinkSuite) TestSelectJSONNumbers(c *test.C) { 712 session, err := r.Connect(r.ConnectOpts{ 713 Address: url, 714 UseJSONNumber: true, 715 }) 716 c.Assert(err, test.IsNil) 717 defer session.Close() 718 // Ensure table + database exist 719 r.DBCreate("test_jnum").Exec(session) 720 r.DB("test_jnum").TableCreate("table_test_query_jsonnum").Exec(session) 721 r.DB("test_jnum").Table("table_test_query_jsonnum").Wait().Exec(session) 722 723 // Insert rows 724 r.DB("test_jnum").Table("table_test_query_jsonnum").Insert(objList).Exec(session) 725 726 // Test query 727 var response interface{} 728 query := r.DB("test_jnum").Table("table_test_query_jsonnum").Get(6) 729 res, err := query.Run(session) 730 c.Assert(err, test.IsNil) 731 732 err = res.One(&response) 733 734 c.Assert(err, test.IsNil) 735 c.Assert(response, JsonEquals, map[string]interface{}{"id": json.Number("6"), "g1": json.Number("1"), "g2": json.Number("1"), "num": json.Number("15")}) 736 737 res.Close() 738 } 739 740 func (s *RethinkSuite) TestSelectManyRows(c *test.C) { 741 // Ensure table + database exist 742 r.DBCreate("test_sm").Exec(session) 743 r.DB("test_sm").TableCreate("table_test_query_many").Exec(session) 744 r.DB("test_sm").Table("table_test_query_many").Wait().Exec(session) 745 r.DB("test_sm").Table("table_test_query_many").Delete().Exec(session) 746 747 // Insert rows 748 for i := 0; i < 100; i++ { 749 data := []interface{}{} 750 751 for j := 0; j < 100; j++ { 752 data = append(data, map[string]interface{}{ 753 "i": i, 754 "j": j, 755 }) 756 } 757 758 r.DB("test_sm").Table("table_test_query_many").Insert(data).Exec(session) 759 } 760 761 // Test query 762 res, err := r.DB("test_sm").Table("table_test_query_many").Run(session, r.RunOpts{ 763 MaxBatchRows: 1, 764 }) 765 c.Assert(err, test.IsNil) 766 767 var n int 768 var response map[string]interface{} 769 for res.Next(&response) { 770 n++ 771 } 772 773 c.Assert(res.Err(), test.IsNil) 774 c.Assert(n, test.Equals, 10000) 775 776 res.Close() 777 }