-
Notifications
You must be signed in to change notification settings - Fork 37
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Handle lastEvaluatedKey for query in DynamoDB (#534)
- Loading branch information
Showing
12 changed files
with
622 additions
and
138 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
core/src/main/java/com/scalar/db/storage/dynamo/EmptyScanner.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package com.scalar.db.storage.dynamo; | ||
|
||
import com.scalar.db.api.Result; | ||
import com.scalar.db.api.Scanner; | ||
import java.util.Collections; | ||
import java.util.Iterator; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public class EmptyScanner implements Scanner { | ||
|
||
@Override | ||
public Optional<Result> one() { | ||
return Optional.empty(); | ||
} | ||
|
||
@Override | ||
public List<Result> all() { | ||
return Collections.emptyList(); | ||
} | ||
|
||
@Override | ||
public void close() {} | ||
|
||
@Override | ||
public Iterator<Result> iterator() { | ||
return Collections.emptyIterator(); | ||
} | ||
} |
73 changes: 73 additions & 0 deletions
73
core/src/main/java/com/scalar/db/storage/dynamo/GetItemScanner.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package com.scalar.db.storage.dynamo; | ||
|
||
import com.scalar.db.api.Result; | ||
import com.scalar.db.api.Scanner; | ||
import com.scalar.db.storage.common.ScannerIterator; | ||
import java.util.Collections; | ||
import java.util.Iterator; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Optional; | ||
import javax.annotation.Nonnull; | ||
import javax.annotation.concurrent.NotThreadSafe; | ||
import software.amazon.awssdk.services.dynamodb.DynamoDbClient; | ||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue; | ||
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest; | ||
import software.amazon.awssdk.services.dynamodb.model.GetItemResponse; | ||
|
||
@NotThreadSafe | ||
public final class GetItemScanner implements Scanner { | ||
private final Map<String, AttributeValue> item; | ||
private final ResultInterpreter resultInterpreter; | ||
|
||
private boolean hasNext; | ||
private ScannerIterator scannerIterator; | ||
|
||
public GetItemScanner( | ||
DynamoDbClient client, GetItemRequest request, ResultInterpreter resultInterpreter) { | ||
GetItemResponse response = client.getItem(request); | ||
if (response.hasItem()) { | ||
item = response.item(); | ||
hasNext = true; | ||
} else { | ||
item = null; | ||
hasNext = false; | ||
} | ||
this.resultInterpreter = resultInterpreter; | ||
} | ||
|
||
@Override | ||
@Nonnull | ||
public Optional<Result> one() { | ||
if (!hasNext) { | ||
return Optional.empty(); | ||
} | ||
|
||
Result result = resultInterpreter.interpret(item); | ||
hasNext = false; | ||
return Optional.of(result); | ||
} | ||
|
||
@Override | ||
@Nonnull | ||
public List<Result> all() { | ||
if (!hasNext) { | ||
return Collections.emptyList(); | ||
} | ||
Result result = resultInterpreter.interpret(item); | ||
hasNext = false; | ||
return Collections.singletonList(result); | ||
} | ||
|
||
@Override | ||
@Nonnull | ||
public Iterator<Result> iterator() { | ||
if (scannerIterator == null) { | ||
scannerIterator = new ScannerIterator(this); | ||
} | ||
return scannerIterator; | ||
} | ||
|
||
@Override | ||
public void close() {} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.