ecto_tablestore v0.3.3 EctoTablestore.Repo behaviour View Source
Defines a repository for Tablestore.
A repository maps to an underlying data store, controlled by Ecto.Adapters.Tablestore
adapter.
When used, the repository expects the :otp_app
option, and uses Ecto.Adapters.Tablestore
by default.
The :otp_app
should point to an OTP application that has repository configuration. For example, the repository:
defmodule EctoTablestore.MyRepo do
use EctoTablestore.Repo,
otp_app: :my_otp_app
end
Configure ex_aliyun_ots
as usual:
config :ex_aliyun_ots, MyInstance,
name: "MY_INSTANCE_NAME",
endpoint: "MY_INSTANCE_ENDPOINT",
access_key_id: "MY_OTS_ACCESS_KEY",
access_key_secret: "MY_OTS_ACCESS_KEY_SECRET"
config :ex_aliyun_ots,
instances: [MyInstance]
Add the following configuration to associate MyRepo
with the previous configuration of ex_aliyun_ots
:
config :my_otp_app, EctoTablestore.MyRepo,
instance: MyInstance
Link to this section Summary
Callbacks
Returns the adapter tied to the repository.
Batch get several rows of data from one or more tables, this batch request put multiple get_row
in one request from client's perspective.
After execute each operation in servers, return results independently and independently consumes capacity units.
Batch write several rows of data from one or more tables, this batch request put multiple put_row/delete_row/update_row in one request from client's perspective. After execute each operation in servers, return results independently and independently consumes capacity units.
Please see Ecto.Repo.delete/2
for details.
Fetch a single struct from tablestore where the whole primary key(s) match the given ids.
Get multiple structs by range from one table, rely on the conjunction of the partition key and other primary key(s).
Please see Ecto.Repo.insert/2
for details.
Similar to get/3
, please ensure schema entity has been filled with the whole primary key(s).
Provide search index features for the following scenarios
Please see Ecto.Repo.start_link/2
for details.
Please see Ecto.Repo.update/2
for details.
Link to this section Types
Link to this section Callbacks
Returns the adapter tied to the repository.
batch_get(gets)
View Sourcebatch_get(gets) :: {:ok, Keyword.t()} | {:error, term()} when gets: [ {module :: Ecto.Schema.t(), [{key :: String.t() | atom(), value :: integer() | String.t()}], options :: Keyword.t()} | {module :: Ecto.Schema.t(), [{key :: String.t() | atom(), value :: integer() | String.t()}]} | (schema_entity :: Ecto.Schema.t()) | {[schema_entity :: Ecto.Schema.t()], options :: Keyword.t()} ]
Batch get several rows of data from one or more tables, this batch request put multiple get_row
in one request from client's perspective.
After execute each operation in servers, return results independently and independently consumes capacity units.
Example
batch_get([
{SchemaA, [[ids: ids1], [ids: ids2]]},
[%SchemaB{keys: keys1}, %SchemaB{keys: keys2}]
])
batch_get([
{[%SchemaB{keys: keys1}, %SchemaB{keys: keys2}], filter: filter("attr_field" == 1), columns_to_get: ["attr_field", "attr_field2"]}
])
batch_write(writes)
View Sourcebatch_write(writes) :: {:ok, Keyword.t()} | {:error, term()} when writes: [ {operation :: :put, items :: [ schema_entity :: Ecto.Schema.t() | {schema_entity :: Ecto.Schema.t(), options :: Keyword.t()} | {module :: Ecto.Schema.t(), ids :: list(), attrs :: list(), options :: Keyword.t()} ]} | {operation :: :update, items :: [ changeset :: Ecto.Changeset.t() | {changeset :: Ecto.Changeset.t(), options :: Keyword.t()} ]} | {operation :: :delete, items :: [ schema_entity :: Ecto.Schema.t() | {schema_entity :: Ecto.Schema.t(), options :: Keyword.t()} | {module :: Ecto.Schema.t(), ids :: list(), options :: Keyword.t()} ]} ]
Batch write several rows of data from one or more tables, this batch request put multiple put_row/delete_row/update_row in one request from client's perspective. After execute each operation in servers, return results independently and independently consumes capacity units.
Example
The options are similar as put_row
/ delete_row
/ update_row
, but expect transaction_id
option.
batch_write([
delete: [
schema_entity_a,
schema_entity_b
],
put: [
{%SchemaB{}, condition: condition(:ignore)},
{%SchemaA{}, condition: condition(:expect_not_exist)}
],
update: [
{changeset_schema_a, return_type: :pk},
{changeset_schema_b}
]
])
delete(struct_or_changeset, options)
View Sourcedelete( struct_or_changeset :: Ecto.Schema.t() | Ecto.Changeset.t(), options :: Keyword.t() ) :: {:ok, Ecto.Schema.t()} | {:error, term()}
Please see Ecto.Repo.delete/2
for details.
get(schema, ids, options)
View Sourceget(schema :: Ecto.Schema.t(), ids :: list(), options :: Keyword.t()) :: Ecto.Schema.t() | {:error, term()} | nil
Fetch a single struct from tablestore where the whole primary key(s) match the given ids.
Options
columns_to_get
, string list, return the specified attribute columns, if not specify this option field, will try to return all attribute columns together.start_column
, string, used as a starting column for Wide Column read, the return result contains this as starter.end_column
, string, used as a ending column for Wide Column read, the return result DON NOT contain this column.filter
, used as a filter by condition, support">"
,"<"
,">="
,"<="
,"=="
,"and"
,"or"
and"()"
expressions.The
ignore_if_missing
can be used for the non-existed attribute column, for example:An attribute column does not exist meanwhile set it as
true
, will ignore this match condition in the return result;An existed attribute column DOES NOT suit for this usecase, the match condition will always affect the return result, if match condition does not satisfy, they won't be return in result.
filter: filter(("name[ignore_if_missing: true]" == var_name and "age" > 1) or ("class" == "1"))
transaction_id
, read under local transaction in a partition key.
Get multiple structs by range from one table, rely on the conjunction of the partition key and other primary key(s).
Options
direction
, set it as:forward
to make the order of the query result in ascending by primary key(s), set it as:backward
to make the order of the query result in descending by primary key(s).columns_to_get
, string list, return the specified attribute columns, if not specify this field all attribute columns will be return.start_column
, string, used as a starting column for Wide Column read, the return result contains this as starter.end_column
, string, used as a ending column for Wide Column read, the return result DON NOT contain this column.filter
, used as a filter by condition, support">"
,"<"
,">="
,"<="
,"=="
,"and"
,"or"
and"()"
expressions.The
ignore_if_missing
can be used for the non-existed attribute column, for example:An attribute column does not exist meanwhile set it as
true
, will ignore this match condition in the return result;An existed attribute column DOES NOT suit for this usecase, the match condition will always affect the return result, if match condition does not satisfy, they won't be return in result.
filter: filter(("name[ignore_if_missing: true]" == var_name and "age" > 1) or ("class" == "1"))
transaction_id
, read under local transaction in a partition key.
insert(struct_or_changeset, options)
View Sourceinsert( struct_or_changeset :: Ecto.Schema.t() | Ecto.Changeset.t(), options :: Keyword.t() ) :: {:ok, Ecto.Schema.t()} | {:error, term()}
Please see Ecto.Repo.insert/2
for details.
one(entity, options)
View Sourceone(entity :: Ecto.Schema.t(), options :: Keyword.t()) :: Ecto.Schema.t() | {:error, term()} | nil
Similar to get/3
, please ensure schema entity has been filled with the whole primary key(s).
NOTICE:
- If there are some attribute column(s) are provided in entity, these fields will be combined within multiple
:==
filtering expressions; - If there are some attribute column(s) are provided and meanwhile set
filter
option, they will be merged into a composite filter.
Options
Please refer get/3
.
search(schema, index_name, options)
View Sourcesearch( schema :: Ecto.Schema.t(), index_name :: String.t(), options :: Keyword.t() ) :: {:ok, search_result()} | {:error, term()}
Provide search index features for the following scenarios:
- MatchAllQuery
- MatchQuery
- MatchPhraseQuery
- TermQuery
- TermsQuery
- PrefixQuery
- RangeQuery
- WildcardQuery
- BoolQuery
- NestedQuery
- ExistsQuery
Currently, not supported search index features which are depended by ex_aliyun_ots
- GeoBoundingBoxQuery
- GeoDistanceQuery
- GeoPolygonQuery
Please see Ecto.Repo.start_link/2
for details.
update(changeset, options)
View Sourceupdate(changeset :: Ecto.Changeset.t(), options :: Keyword.t()) :: {:ok, Ecto.Schema.t()} | {:error, term()}
Please see Ecto.Repo.update/2
for details.