gopkg.in/rethinkdb/rethinkdb-go.v6@v6.2.2/query_select.go (about) 1 package rethinkdb 2 3 import ( 4 p "gopkg.in/rethinkdb/rethinkdb-go.v6/ql2" 5 ) 6 7 // DB references a database. 8 func DB(args ...interface{}) Term { 9 return constructRootTerm("DB", p.Term_DB, args, map[string]interface{}{}) 10 } 11 12 // TableOpts contains the optional arguments for the Table term 13 type TableOpts struct { 14 ReadMode interface{} `rethinkdb:"read_mode,omitempty"` 15 UseOutdated interface{} `rethinkdb:"use_outdated,omitempty"` // Deprecated 16 IdentifierFormat interface{} `rethinkdb:"identifier_format,omitempty"` 17 } 18 19 func (o TableOpts) toMap() map[string]interface{} { 20 return optArgsToMap(o) 21 } 22 23 // Table selects all documents in a table. This command can be chained with 24 // other commands to do further processing on the data. 25 // 26 // There are two optional arguments. 27 // - useOutdated: if true, this allows potentially out-of-date data to be 28 // returned, with potentially faster reads. It also allows you to perform reads 29 // from a secondary replica if a primary has failed. Default false. 30 // - identifierFormat: possible values are name and uuid, with a default of name. 31 // If set to uuid, then system tables will refer to servers, databases and tables 32 // by UUID rather than name. (This only has an effect when used with system tables.) 33 func Table(name interface{}, optArgs ...TableOpts) Term { 34 opts := map[string]interface{}{} 35 if len(optArgs) >= 1 { 36 opts = optArgs[0].toMap() 37 } 38 return constructRootTerm("Table", p.Term_TABLE, []interface{}{name}, opts) 39 } 40 41 // Table selects all documents in a table. This command can be chained with 42 // other commands to do further processing on the data. 43 // 44 // There are two optional arguments. 45 // - useOutdated: if true, this allows potentially out-of-date data to be 46 // returned, with potentially faster reads. It also allows you to perform reads 47 // from a secondary replica if a primary has failed. Default false. 48 // - identifierFormat: possible values are name and uuid, with a default of name. 49 // If set to uuid, then system tables will refer to servers, databases and tables 50 // by UUID rather than name. (This only has an effect when used with system tables.) 51 func (t Term) Table(name interface{}, optArgs ...TableOpts) Term { 52 opts := map[string]interface{}{} 53 if len(optArgs) >= 1 { 54 opts = optArgs[0].toMap() 55 } 56 return constructMethodTerm(t, "Table", p.Term_TABLE, []interface{}{name}, opts) 57 } 58 59 // Get gets a document by primary key. If nothing was found, RethinkDB will return a nil value. 60 func (t Term) Get(args ...interface{}) Term { 61 return constructMethodTerm(t, "Get", p.Term_GET, args, map[string]interface{}{}) 62 } 63 64 // GetAllOpts contains the optional arguments for the GetAll term 65 type GetAllOpts struct { 66 Index interface{} `rethinkdb:"index,omitempty"` 67 } 68 69 func (o GetAllOpts) toMap() map[string]interface{} { 70 return optArgsToMap(o) 71 } 72 73 // GetAll gets all documents where the given value matches the value of the primary 74 // index. Multiple values can be passed this function if you want to select multiple 75 // documents. If the documents you are fetching have composite keys then each 76 // argument should be a slice. For more information see the examples. 77 func (t Term) GetAll(keys ...interface{}) Term { 78 return constructMethodTerm(t, "GetAll", p.Term_GET_ALL, keys, map[string]interface{}{}) 79 } 80 81 // GetAllByIndex gets all documents where the given value matches the value of 82 // the requested index. 83 func (t Term) GetAllByIndex(index interface{}, keys ...interface{}) Term { 84 return constructMethodTerm(t, "GetAll", p.Term_GET_ALL, keys, map[string]interface{}{"index": index}) 85 } 86 87 // BetweenOpts contains the optional arguments for the Between term 88 type BetweenOpts struct { 89 Index interface{} `rethinkdb:"index,omitempty"` 90 LeftBound interface{} `rethinkdb:"left_bound,omitempty"` 91 RightBound interface{} `rethinkdb:"right_bound,omitempty"` 92 } 93 94 func (o BetweenOpts) toMap() map[string]interface{} { 95 return optArgsToMap(o) 96 } 97 98 // Between gets all documents between two keys. Accepts three optional arguments: 99 // index, leftBound, and rightBound. If index is set to the name of a secondary 100 // index, between will return all documents where that index’s value is in the 101 // specified range (it uses the primary key by default). leftBound or rightBound 102 // may be set to open or closed to indicate whether or not to include that endpoint 103 // of the range (by default, leftBound is closed and rightBound is open). 104 // 105 // You may also use the special constants r.minval and r.maxval for boundaries, 106 // which represent “less than any index key” and “more than any index key” 107 // respectively. For instance, if you use r.minval as the lower key, then between 108 // will return all documents whose primary keys (or indexes) are less than the 109 // specified upper key. 110 func (t Term) Between(lowerKey, upperKey interface{}, optArgs ...BetweenOpts) Term { 111 opts := map[string]interface{}{} 112 if len(optArgs) >= 1 { 113 opts = optArgs[0].toMap() 114 } 115 return constructMethodTerm(t, "Between", p.Term_BETWEEN, []interface{}{lowerKey, upperKey}, opts) 116 } 117 118 // FilterOpts contains the optional arguments for the Filter term 119 type FilterOpts struct { 120 Default interface{} `rethinkdb:"default,omitempty"` 121 } 122 123 func (o FilterOpts) toMap() map[string]interface{} { 124 return optArgsToMap(o) 125 } 126 127 // Filter gets all the documents for which the given predicate is true. 128 // 129 // Filter can be called on a sequence, selection, or a field containing an array 130 // of elements. The return type is the same as the type on which the function was 131 // called on. The body of every filter is wrapped in an implicit `.default(false)`, 132 // and the default value can be changed by passing the optional argument `default`. 133 // Setting this optional argument to `r.error()` will cause any non-existence 134 // errors to abort the filter. 135 func (t Term) Filter(f interface{}, optArgs ...FilterOpts) Term { 136 opts := map[string]interface{}{} 137 if len(optArgs) >= 1 { 138 opts = optArgs[0].toMap() 139 } 140 return constructMethodTerm(t, "Filter", p.Term_FILTER, []interface{}{funcWrap(f)}, opts) 141 }