本文整理匯總了Golang中database/cassandra.KeyRange.StartKey方法的典型用法代碼示例。如果您正苦於以下問題:Golang KeyRange.StartKey方法的具體用法?Golang KeyRange.StartKey怎麽用?Golang KeyRange.StartKey使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類database/cassandra.KeyRange
的用法示例。
在下文中一共展示了KeyRange.StartKey方法的6個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: EnumerateTrashedMembers
// Get a list of all members which are currently in the trash.
func (m *MembershipDB) EnumerateTrashedMembers(prev string, num int32) ([]*MemberWithKey, error) {
var cp *cassandra.ColumnParent = cassandra.NewColumnParent()
var pred *cassandra.SlicePredicate = cassandra.NewSlicePredicate()
var r *cassandra.KeyRange = cassandra.NewKeyRange()
var kss []*cassandra.KeySlice
var ks *cassandra.KeySlice
var rv []*MemberWithKey
var err error
// Fetch the protobuf column of the application column family.
cp.ColumnFamily = "membership_archive"
pred.ColumnNames = [][]byte{
[]byte("pb_data"),
}
if len(prev) > 0 {
var uuid cassandra.UUID
if uuid, err = cassandra.ParseUUID(prev); err != nil {
return rv, err
}
r.StartKey = append([]byte(archivePrefix), []byte(uuid)...)
} else {
r.StartKey = []byte(archivePrefix)
}
r.EndKey = []byte(archiveEnd)
r.Count = num
kss, err = m.conn.GetRangeSlices(cp, pred, r, cassandra.ConsistencyLevel_ONE)
if err != nil {
return rv, err
}
for _, ks = range kss {
var member *MemberWithKey
var scol *cassandra.ColumnOrSuperColumn
var uuid cassandra.UUID = cassandra.UUIDFromBytes(
ks.Key[len(archivePrefix):])
if len(ks.Columns) == 0 {
continue
}
for _, scol = range ks.Columns {
var col *cassandra.Column = scol.Column
if string(col.Name) == "pb_data" {
var agreement = new(MembershipAgreement)
member = new(MemberWithKey)
err = proto.Unmarshal(col.Value, agreement)
proto.Merge(&member.Member, agreement.GetMemberData())
member.Key = uuid.String()
}
}
if member != nil {
rv = append(rv, member)
}
}
return rv, nil
}
示例2: GetMemberDetailByUsername
// Retrieve a specific members detailed membership data, but fetch it by the
// user name of the member.
func (m *MembershipDB) GetMemberDetailByUsername(username string) (
*MembershipAgreement, error) {
var member *MembershipAgreement = new(MembershipAgreement)
var cp *cassandra.ColumnParent = cassandra.NewColumnParent()
var pred *cassandra.SlicePredicate = cassandra.NewSlicePredicate()
var kr *cassandra.KeyRange = cassandra.NewKeyRange()
var expr *cassandra.IndexExpression = cassandra.NewIndexExpression()
var r []*cassandra.KeySlice
var ks *cassandra.KeySlice
var err error
expr.ColumnName = []byte("username")
expr.Op = cassandra.IndexOperator_EQ
expr.Value = []byte(username)
cp.ColumnFamily = "members"
pred.ColumnNames = [][]byte{[]byte("pb_data")}
kr.StartKey = []byte(memberPrefix)
kr.EndKey = []byte(memberEnd)
kr.RowFilter = []*cassandra.IndexExpression{expr}
r, err = m.conn.GetRangeSlices(
cp, pred, kr, cassandra.ConsistencyLevel_ONE)
if err != nil {
return nil, err
}
for _, ks = range r {
var cos *cassandra.ColumnOrSuperColumn
for _, cos = range ks.Columns {
var col = cos.Column
if string(col.Name) == "pb_data" {
member = new(MembershipAgreement)
err = proto.Unmarshal(col.Value, member)
return member, nil
} else {
return nil, errors.New("Unexpected column " +
string(col.Name))
}
}
}
return nil, errors.New("Not found")
}
示例3: ServeHTTP
func (self *ProductSearchAPI) ServeHTTP(w http.ResponseWriter, req *http.Request) {
var err error
var query string = req.FormValue("q")
var rawdata []byte
var res CategorizedSearchResult
numRequests.Add(1)
numAPIRequests.Add(1)
// Check the user is in the reqeuested scope.
if !self.authenticator.IsAuthenticatedScope(req, self.scope) {
numDisallowedScope.Add(1)
http.Error(w,
"You are not in the right group to access this resource",
http.StatusForbidden)
return
}
if len(query) >= 3 {
var product_results [][]byte
var cp *cassandra.ColumnParent = cassandra.NewColumnParent()
var pred *cassandra.SlicePredicate = cassandra.NewSlicePredicate()
var kr *cassandra.KeyRange = cassandra.NewKeyRange()
var colmap map[string][]*cassandra.ColumnOrSuperColumn
var slices []*cassandra.KeySlice
var ire *cassandra.InvalidRequestException
var ue *cassandra.UnavailableException
var te *cassandra.TimedOutException
var endkey []byte = []byte(query)
var r *SearchResult
var pos int = len(endkey) - 1
// Handle overflows
for endkey[pos] == 255 && pos > 0 {
endkey[pos] = 0
pos--
}
// Produce endkey by incrementing the last byte of the start key.
endkey[pos]++
// Search for projects with the given name.
cp.ColumnFamily = "products_byname"
pred.ColumnNames = [][]byte{[]byte("product")}
kr.StartKey = []byte(query)
kr.EndKey = endkey
kr.Count = 32 // Limit to 32 results.
slices, ire, ue, te, err = self.client.GetRangeSlices(
cp, pred, kr, cassandra.ConsistencyLevel_ONE)
if ire != nil {
log.Print("Error fetching products_byname: ", ire.Why)
numCassandraErrors.Add("invalid-request", 1)
http.Error(w, ire.Why, http.StatusInternalServerError)
return
}
if ue != nil {
log.Print("Cassandra unavailable when fetching products_byname")
numCassandraErrors.Add("invalid-request", 1)
http.Error(w, "Database unavailable", http.StatusInternalServerError)
return
}
if te != nil {
log.Print("Cassandra timed out when fetching products_byname")
numCassandraErrors.Add("timeout", 1)
http.Error(w, "Database timed out", http.StatusInternalServerError)
return
}
if err != nil {
log.Print("OS error when fetching products_byname: ", err)
numCassandraErrors.Add("generic-error", 1)
http.Error(w, "OS error talking to database",
http.StatusInternalServerError)
return
}
for _, slice := range slices {
for _, csc := range slice.Columns {
var col *cassandra.Column = csc.Column
if col == nil || !col.IsSetValue() {
continue
}
if string(col.Name) != "product" {
log.Print("Bizarre products_byname row ",
string(slice.Key), " (", slice.Key, "), has ",
string(col.Name), " (", col.Name, ")")
continue
}
r = new(SearchResult)
r.Name = string(slice.Key)
r.Uuid = UUID(col.Value).String()
res.Products = append(res.Products, r)
}
}
// Search for projects with the given name.
cp.ColumnFamily = "products_bybarcode"
//.........這裏部分代碼省略.........
示例4: main
//.........這裏部分代碼省略.........
var uid string
for _, uid = range entry.GetAttributeValues("uidNumber") {
var uidNumber uint64
uidNumber, err = strconv.ParseUint(uid, 10, 64)
if err != nil {
log.Print("Error parsing \"", uid, "\" as a number: ",
err)
} else if uidNumber > greatestUid {
greatestUid = uidNumber
}
}
}
}
// Connect to Cassandra so we can get a list of records to be processed.
db, err = cassandra.NewRetryCassandraClient(
config.DatabaseConfig.GetDatabaseServer())
if err != nil {
log.Fatal("Error connecting to Cassandra database at ",
config.DatabaseConfig.GetDatabaseServer(), ": ", err)
}
err = db.SetKeyspace(config.DatabaseConfig.GetDatabaseName())
if err != nil {
log.Fatal("Error setting keyspace: ", err)
}
cp = cassandra.NewColumnParent()
cp.ColumnFamily = "membership_queue"
pred = cassandra.NewSlicePredicate()
pred.ColumnNames = [][]byte{[]byte("pb_data")}
kr = cassandra.NewKeyRange()
kr.StartKey = []byte("queue:")
kr.EndKey = []byte("queue;")
kss, err = db.GetRangeSlices(cp, pred, kr,
cassandra.ConsistencyLevel_QUORUM)
if err != nil {
log.Fatal("Error getting range slice: ", err)
}
for _, ks = range kss {
mmap = make(map[string]map[string][]*cassandra.Mutation)
var csc *cassandra.ColumnOrSuperColumn
for _, csc = range ks.Columns {
var col *cassandra.Column = csc.Column
var agreement membersys.MembershipAgreement
var m *cassandra.Mutation
if col == nil {
continue
}
if string(col.Name) != "pb_data" {
log.Print("Column selected was not as requested: ",
col.Name)
continue
}
err = proto.Unmarshal(col.Value, &agreement)
if err != nil {
log.Print("Unable to parse column ", col.Name, " of ",
ks.Key, ": ", err)
continue
}
示例5: EnumerateMembershipRequests
// Get a list of all membership applications currently in the database.
// Returns a set of "num" entries beginning after "prev". If "criterion" is
// given, it will be compared against the name of the member.
func (m *MembershipDB) EnumerateMembershipRequests(criterion, prev string, num int32) (
[]*MemberWithKey, error) {
var cp *cassandra.ColumnParent = cassandra.NewColumnParent()
var pred *cassandra.SlicePredicate = cassandra.NewSlicePredicate()
var r *cassandra.KeyRange = cassandra.NewKeyRange()
var kss []*cassandra.KeySlice
var ks *cassandra.KeySlice
var rv []*MemberWithKey
var err error
// Fetch the name, street, city and fee columns of the application column family.
cp.ColumnFamily = "application"
pred.ColumnNames = [][]byte{
[]byte("name"), []byte("street"), []byte("city"), []byte("fee"),
[]byte("fee_yearly"),
}
if len(prev) > 0 {
var uuid cassandra.UUID
if uuid, err = cassandra.ParseUUID(prev); err != nil {
return rv, err
}
r.StartKey = append([]byte(applicationPrefix), []byte(uuid)...)
} else {
r.StartKey = []byte(applicationPrefix)
}
r.EndKey = []byte(applicationEnd)
r.Count = num
kss, err = m.conn.GetRangeSlices(
cp, pred, r, cassandra.ConsistencyLevel_ONE)
if err != nil {
return rv, err
}
for _, ks = range kss {
var member *MemberWithKey = new(MemberWithKey)
var scol *cassandra.ColumnOrSuperColumn
var uuid cassandra.UUID = cassandra.UUIDFromBytes(
ks.Key[len(applicationPrefix):])
member.Key = uuid.String()
if len(ks.Columns) == 0 {
continue
}
for _, scol = range ks.Columns {
var col *cassandra.Column = scol.Column
if string(col.Name) == "name" {
member.Name = proto.String(string(col.Value))
} else if string(col.Name) == "street" {
member.Street = proto.String(string(col.Value))
} else if string(col.Name) == "city" {
member.City = proto.String(string(col.Value))
} else if string(col.Name) == "fee" {
member.Fee = proto.Uint64(binary.BigEndian.Uint64(col.Value))
} else if string(col.Name) == "fee_yearly" {
member.FeeYearly = proto.Bool(col.Value[0] == 1)
}
}
rv = append(rv, member)
}
return rv, nil
}
示例6: EnumerateMembers
// Get a list of all members currently in the database. Returns a set of
// "num" entries beginning after "prev".
// Returns a filled-out member structure and the timestamp when the
// membership was approved.
func (m *MembershipDB) EnumerateMembers(prev string, num int32) (
[]*Member, error) {
var cp *cassandra.ColumnParent = cassandra.NewColumnParent()
var pred *cassandra.SlicePredicate = cassandra.NewSlicePredicate()
var r *cassandra.KeyRange = cassandra.NewKeyRange()
var kss []*cassandra.KeySlice
var ks *cassandra.KeySlice
var rv []*Member
var err error
// Fetch all relevant non-protobuf columns of the members column family.
cp.ColumnFamily = "members"
pred.ColumnNames = [][]byte{
[]byte("name"), []byte("street"), []byte("city"), []byte("country"),
[]byte("email"), []byte("phone"), []byte("username"), []byte("fee"),
[]byte("fee_yearly"),
}
r.StartKey = []byte(memberPrefix + prev)
r.EndKey = []byte(memberEnd)
r.Count = num
kss, err = m.conn.GetRangeSlices(
cp, pred, r, cassandra.ConsistencyLevel_ONE)
if err != nil {
return rv, err
}
for _, ks = range kss {
var member *Member = new(Member)
var scol *cassandra.ColumnOrSuperColumn
if len(ks.Columns) == 0 {
continue
}
member.Email = proto.String(string(ks.Key[len(memberPrefix):]))
for _, scol = range ks.Columns {
var col *cassandra.Column = scol.Column
var colname string = string(col.Name)
if colname == "name" {
member.Name = proto.String(string(col.Value))
} else if colname == "street" {
member.Street = proto.String(string(col.Value))
} else if colname == "city" {
member.City = proto.String(string(col.Value))
} else if colname == "country" {
member.Country = proto.String(string(col.Value))
} else if colname == "email" {
member.Email = proto.String(string(col.Value))
} else if colname == "phone" {
member.Phone = proto.String(string(col.Value))
} else if colname == "username" {
member.Username = proto.String(string(col.Value))
} else if colname == "fee" {
member.Fee = proto.Uint64(binary.BigEndian.Uint64(col.Value))
} else if colname == "fee_yearly" {
member.FeeYearly = proto.Bool(col.Value[0] == 1)
}
}
rv = append(rv, member)
}
return rv, nil
}