func runExample(client *as.Client) { key, err := as.NewKey(*shared.Namespace, *shared.Set, "addkey") shared.PanicOnError(err) binName := "addbin" // Delete record if it already exists. client.Delete(shared.WritePolicy, key) // Perform some adds and check results. bin := as.NewBin(binName, 10) log.Println("Initial add will create record. Initial value is ", bin.Value, ".") client.AddBins(shared.WritePolicy, key, bin) bin = as.NewBin(binName, 5) log.Println("Add ", bin.Value, " to existing record.") client.AddBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) if record == nil { log.Fatalf( "Failed to get: namespace=%s set=%s key=%s", key.Namespace(), key.SetName(), key.Value()) } // The value received from the server is an unsigned byte stream. // Convert to an integer before comparing with expected. received := record.Bins[bin.Name] expected := 15 if received == expected { log.Printf("Add successful: ns=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), bin.Name, received) } else { log.Fatalf("Add mismatch: Expected %d. Received %d.", expected, received) } // Demonstrate add and get combined. bin = as.NewBin(binName, 30) log.Println("Add ", bin.Value, " to existing record.") record, err = client.Operate(shared.WritePolicy, key, as.AddOp(bin), as.GetOp()) shared.PanicOnError(err) expected = 45 received = record.Bins[bin.Name] if received == expected { log.Printf("Add successful: ns=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), bin.Name, received) } else { log.Fatalf("Add mismatch: Expected %d. Received %d.", expected, received) } }
/** * Write/Read Array/Map combination directly instead of relying on java serializer. */ func testListMapCombined(client *as.Client) { log.Printf("Read/Write Array/Map") key, _ := as.NewKey(*shared.Namespace, *shared.Set, "listmapkey") client.Delete(shared.WritePolicy, key) blob := []byte{3, 52, 125} inner := []interface{}{ "string2", 5, } innerMap := map[interface{}]interface{}{ "a": 1, 2: "b", 3: blob, "list": inner, } list := []interface{}{ "string1", 8, inner, innerMap, } bin := as.NewBin("listmapbin", list) client.PutBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) received := record.Bins[bin.Name].([]interface{}) validateSize(4, len(received)) validate("string1", received[0]) // Server convert numbers to long, so must expect long. validate(8, received[1]) receivedInner := received[2].([]interface{}) validateSize(2, len(receivedInner)) validate("string2", receivedInner[0]) validate(5, receivedInner[1]) receivedMap := received[3].(map[interface{}]interface{}) validateSize(4, len(receivedMap)) validate(1, receivedMap["a"]) validate("b", receivedMap[2]) validateBytes(blob, receivedMap[3].([]byte)) receivedInner2 := receivedMap["list"].([]interface{}) validateSize(2, len(receivedInner2)) validate("string2", receivedInner2[0]) validate(5, receivedInner2[1]) log.Printf("Read/Write Array/Map successful") }
/** * Write/Read map[interface{}]interface{} directly instead of relying on java serializer. */ func testMapComplex(client *as.Client) { log.Printf("Read/Write map[interface{}]interface{}") key, _ := as.NewKey(*shared.Namespace, *shared.Set, "mapkey2") client.Delete(shared.WritePolicy, key) blob := []byte{3, 52, 125} list := []int{ 100034, 12384955, 3, 512, } amap := map[interface{}]interface{}{ "key1": "string1", "key2": 2, "key3": blob, "key4": list, } bin := as.NewBin("mapbin2", amap) client.PutBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) receivedMap := record.Bins[bin.Name].(map[interface{}]interface{}) validateSize(4, len(receivedMap)) validate("string1", receivedMap["key1"]) // Server convert numbers to long, so must expect long. validate(2, receivedMap["key2"]) validateBytes(blob, receivedMap["key3"].([]byte)) receivedInner := receivedMap["key4"].([]interface{}) validateSize(4, len(receivedInner)) validate(100034, receivedInner[0]) validate(12384955, receivedInner[1]) validate(3, receivedInner[2]) validate(512, receivedInner[3]) log.Printf("Read/Write map[interface{}]interface{} successful") }
func runReplaceOnlyExample(client *as.Client) { key, err := as.NewKey(*shared.Namespace, *shared.Set, "replaceonlykey") shared.PanicOnError(err) bin := as.NewBin("bin", "value") // Delete record if it already exists. client.Delete(shared.WritePolicy, key) log.Printf("Replace record requiring that it exists: namespace=%s set=%s key=%s", key.Namespace(), key.SetName(), key.Value()) wpolicy := as.NewWritePolicy(0, 0) wpolicy.RecordExistsAction = as.REPLACE_ONLY err = client.PutBins(wpolicy, key, bin) if ae, ok := err.(ast.AerospikeError); ok && ae.ResultCode() == ast.KEY_NOT_FOUND_ERROR { log.Printf("Success. `Not found` error returned as expected.") } else { log.Fatalln("Failure. This command should have resulted in an error.") } }
/** * Write/Read []string directly instead of relying on java serializer. */ func testListStrings(client *as.Client) { log.Printf("Read/Write []string") key, _ := as.NewKey(*shared.Namespace, *shared.Set, "listkey1") client.Delete(shared.WritePolicy, key) list := []string{"string1", "string2", "string3"} bin := as.NewBin("listbin1", list) client.PutBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) receivedList := record.Bins[bin.Name].([]interface{}) validateSize(3, len(receivedList)) validate("string1", receivedList[0]) validate("string2", receivedList[1]) validate("string3", receivedList[2]) log.Printf("Read/Write []string successful.") }
func writeIfNotExists(client *as.Client) { key, _ := as.NewKey(*shared.Namespace, *shared.Set, "udfkey3") binName := "udfbin3" // Delete record if it already exists. client.Delete(shared.WritePolicy, key) // Write record only if not already exists. This should succeed. client.Execute(shared.WritePolicy, key, "record_example", "writeUnique", as.NewValue(binName), as.NewValue("first")) // Verify record written. record, err := client.Get(shared.Policy, key, binName) shared.PanicOnError(err) expected := "first" received := record.Bins[binName].(string) if received == expected { log.Printf("Record written: namespace=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), binName, received) } else { log.Printf("Data mismatch: Expected %s. Received %s.", expected, received) } // Write record second time. This should fail. log.Printf("Attempt second write.") client.Execute(shared.WritePolicy, key, "record_example", "writeUnique", as.NewValue(binName), as.NewValue("second")) // Verify record not written. record, err = client.Get(shared.Policy, key, binName) shared.PanicOnError(err) received = record.Bins[binName].(string) if received == expected { log.Printf("Success. Record remained unchanged: namespace=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), binName, received) } else { log.Printf("Data mismatch: Expected %s. Received %s.", expected, received) } }
func runExample(client *as.Client) { key, err := as.NewKey(*shared.Namespace, *shared.Set, "prependkey") shared.PanicOnError(err) binName := "prependbin" // Delete record if it already exists. client.Delete(shared.WritePolicy, key) bin := as.NewBin(binName, "World") log.Println("Initial prepend will create record. Initial value is ", bin.Value, ".") client.PrependBins(shared.WritePolicy, key, bin) bin = as.NewBin(binName, "Hello ") log.Println("Prepend \"", bin.Value, "\" to existing record.") client.PrependBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) if record == nil { log.Fatalf( "Failed to get: namespace=%s set=%s key=%s", key.Namespace(), key.SetName(), key.Value()) } // The value received from the server is an unsigned byte stream. // Convert to an integer before comparing with expected. received := record.Bins[bin.Name] expected := "Hello World" if received == expected { log.Printf("Prepend successful: ns=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), bin.Name, received) } else { log.Fatalf("Prepend mismatch: Expected %s. Received %s.", expected, received) } }
/** * Write/Read map[string]string directly instead of relying on java serializer. */ func testMapStrings(client *as.Client) { log.Printf("Read/Write map[string]string") key, _ := as.NewKey(*shared.Namespace, *shared.Set, "mapkey1") client.Delete(shared.WritePolicy, key) amap := map[string]string{"key1": "string1", "key2": "string2", "key3": "string3", } bin := as.NewBin("mapbin1", amap) client.PutBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) receivedMap := record.Bins[bin.Name].(map[interface{}]interface{}) validateSize(3, len(receivedMap)) validate("string1", receivedMap["key1"]) validate("string2", receivedMap["key2"]) validate("string3", receivedMap["key3"]) log.Printf("Read/Write map[string]string successful") }
/** * Write/Read []interface{} directly instead of relying on java serializer. */ func testListComplex(client *as.Client) { log.Printf("Read/Write []interface{}") key, _ := as.NewKey(*shared.Namespace, *shared.Set, "listkey2") client.Delete(shared.WritePolicy, key) blob := []byte{3, 52, 125} list := []interface{}{"string1", 2, blob} bin := as.NewBin("listbin2", list) client.PutBins(shared.WritePolicy, key, bin) record, err := client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) receivedList := record.Bins[bin.Name].([]interface{}) validateSize(3, len(receivedList)) validate("string1", receivedList[0]) // Server convert numbers to long, so must expect long. validate(2, receivedList[1]) validateBytes(blob, receivedList[2].([]byte)) log.Printf("Read/Write []interface{} successful.") }
func runExample(client *as.Client) { key, _ := as.NewKey(*shared.Namespace, *shared.Set, "genkey") binName := "genbin" // Delete record if it already exists. client.Delete(shared.WritePolicy, key) // Set some values for the same record. bin := as.NewBin(binName, "genvalue1") log.Printf("Put: namespace=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), bin.Name, bin.Value) client.PutBins(shared.WritePolicy, key, bin) bin = as.NewBin(binName, "genvalue2") log.Printf("Put: namespace=%s set=%s key=%s bin=%s value=%s", key.Namespace(), key.SetName(), key.Value(), bin.Name, bin.Value) client.PutBins(shared.WritePolicy, key, bin) // Retrieve record and its generation count. record, err := client.Get(shared.Policy, key, bin.Name) if record == nil { log.Fatalf( "Failed to get: namespace=%s set=%s key=%s", key.Namespace(), key.SetName(), key.Value()) } received := record.Bins[bin.Name] expected := bin.Value.String() if received == expected { log.Printf("Get successful: namespace=%s set=%s key=%s bin=%s value=%s generation=%d", key.Namespace(), key.SetName(), key.Value(), bin.Name, received, record.Generation) } else { log.Fatalf("Get mismatch: Expected %s. Received %s.", expected, received) } // Set record and fail if it's not the expected generation. bin = as.NewBin(binName, "genvalue3") log.Printf("Put: namespace=%s set=%s key=%s bin=%s value=%s expected generation=%d", key.Namespace(), key.SetName(), key.Value(), bin.Name, bin.Value, record.Generation) writePolicy := as.NewWritePolicy(0, 2) writePolicy.GenerationPolicy = as.EXPECT_GEN_EQUAL writePolicy.Generation = record.Generation client.PutBins(writePolicy, key, bin) // Set record with invalid generation and check results . bin = as.NewBin(binName, "genvalue4") writePolicy.Generation = 9999 log.Printf("Put: namespace=%s set=%s key=%s bin=%s value=%s expected generation=%d", key.Namespace(), key.SetName(), key.Value(), bin.Name, bin.Value, writePolicy.Generation) err = client.PutBins(writePolicy, key, bin) if err != nil { if ae, ok := err.(ast.AerospikeError); ok && ae.ResultCode() == ast.GENERATION_ERROR { shared.PanicOnError(errors.New("Should have received generation error instead of success.")) } log.Printf("Success: Generation error returned as expected.") } else { log.Fatalf( "Unexpected set return code: namespace=%s set=%s key=%s bin=%s value=%s code=%s", key.Namespace(), key.SetName(), key.Value(), bin.Name, bin.Value, err) } // Verify results. record, err = client.Get(shared.Policy, key, bin.Name) shared.PanicOnError(err) if record == nil { log.Fatalf( "Failed to get: namespace=%s set=%s key=%s", key.Namespace(), key.SetName(), key.Value()) } received = record.Bins[bin.Name] expected = "genvalue3" if received == expected { log.Printf("Get successful: namespace=%s set=%s key=%s bin=%s value=%s generation=%d", key.Namespace(), key.SetName(), key.Value(), bin.Name, received, record.Generation) } else { log.Fatalf("Get mismatch: Expected %s. Received %s.", expected, received) } }