Compare commits
266 commits
doc-site-t
...
master
Author | SHA1 | Date | |
---|---|---|---|
201ec39dd2 | |||
216f078d44 | |||
8ab11d3503 | |||
92eab3692f | |||
02ebaf5bae | |||
517b781da1 | |||
6b269a660d | |||
92f400a553 | |||
ff527ad220 | |||
73240913cc | |||
|
c10575e04d | ||
|
5fdb9a4970 | ||
|
8f226ca050 | ||
|
aa6b634e64 | ||
986b439fb9 | |||
|
0d55e6acba | ||
d39f8aad4e | |||
7cfff34602 | |||
|
8175b98a7c | ||
|
b19a994c68 | ||
|
9a4ba44060 | ||
|
124bf54385 | ||
|
3df00eb63a | ||
|
8041c704dc | ||
|
4aa70567b8 | ||
|
c9a46327bc | ||
|
d22bf451a4 | ||
|
e73effb7d2 | ||
|
eae76e6f43 | ||
|
bd818ba1f1 | ||
|
73feb622cd | ||
|
d3821432bc | ||
|
179c123061 | ||
|
1500d4348c | ||
|
479fbc4572 | ||
|
97628a251f | ||
|
903ac24589 | ||
|
1f6620bf87 | ||
|
e64e2cf2f2 | ||
|
08694dc45a | ||
|
64bb6284d0 | ||
|
5f376a8664 | ||
|
ad3d7157a5 | ||
|
46ddac347e | ||
|
fba46fb1f2 | ||
|
071a916981 | ||
|
d4736a83e4 | ||
|
15df38fc8f | ||
|
614ce63e2b | ||
|
5a7caf7488 | ||
|
a02570fd5e | ||
|
4ec3c3cddc | ||
|
8e8e7b9739 | ||
|
abcdad5976 | ||
|
9d4f328af1 | ||
|
f918dcd915 | ||
|
7185d5ee13 | ||
|
c8c7dda27a | ||
|
2f299fde6c | ||
|
3a62dbc122 | ||
|
0d79eeed8f | ||
|
ca9d8c0096 | ||
|
ffaba698e0 | ||
|
8446a1bc4a | ||
|
722f7fb782 | ||
|
75b5a66a91 | ||
|
ac532be358 | ||
|
44036160d0 | ||
|
c8c1363b14 | ||
|
32ce6d2129 | ||
|
380945a655 | ||
|
af9bb1fcfe | ||
|
c295d82872 | ||
|
c2e39eeb5c | ||
|
985fd0bbdf | ||
|
c02c06ce2b | ||
|
b138c7e257 | ||
|
88df3c4d8d | ||
|
feb9665299 | ||
|
19cb2870da | ||
|
5c2a7261a1 | ||
|
0f015b2f10 | ||
|
da89cfc797 | ||
|
9a6ae48d8e | ||
|
d97e882a4a | ||
5a65cd38c9 | |||
5e700133f5 | |||
4a63ca98df | |||
2e28e87af8 | |||
5998ef73fb | |||
9bcd0955ba | |||
39219af1ff | |||
6d88abfb44 | |||
|
31ec02afd3 | ||
|
1622978acf | ||
|
26cd399e3a | ||
949386a43f | |||
5b0cb80b32 | |||
8039183097 | |||
9c472eff41 | |||
324929a02a | |||
|
526c9c3928 | ||
4b1583473e | |||
125306e108 | |||
0e63167aab | |||
5899bf8624 | |||
bf1ac14d32 | |||
b428579865 | |||
9eb6bc6220 | |||
41f1ff2393 | |||
5979fa5844 | |||
dfb5866174 | |||
58e06742fd | |||
a8223d11c9 | |||
b41bcf40f3 | |||
18a0c15320 | |||
6b7343a893 | |||
|
4f81c4e15b | ||
8aec4048b9 | |||
|
ef1c196516 | ||
|
fcb3a9182f | ||
|
9421a5c3bb | ||
|
60c65033b2 | ||
|
fa3091d078 | ||
286155a18a | |||
|
d6b3d1818a | ||
|
b2f92b8461 | ||
|
c2122a210c | ||
|
bcb56b0561 | ||
|
be02b86bbe | ||
|
e6a2af3553 | ||
|
2b97a90b64 | ||
|
ae9f969e59 | ||
|
4d92e3eef9 | ||
|
3547cfcd16 | ||
|
4e9d6b3f58 | ||
|
76ae972e2e | ||
|
f4002f34f4 | ||
|
5596873e8f | ||
|
cdfd1f6b30 | ||
|
ff48f6369a | ||
|
95780c0ab5 | ||
|
e3bd1cb77e | ||
|
a25f476734 | ||
|
17112dbc4d | ||
|
b6b316953e | ||
|
3d965fdf6e | ||
|
e55376e98b | ||
|
b22b29679b | ||
|
64821079c2 | ||
|
bcec011ca5 | ||
|
fba9568d44 | ||
|
e3113783ae | ||
|
cd99774e2c | ||
|
66cc4e14ad | ||
|
22b17a6779 | ||
|
6160dd59f7 | ||
|
b8b2aef181 | ||
|
5bc6d76bb3 | ||
|
8c2245ff0b | ||
|
0b84a0802d | ||
|
8ddbd18f5f | ||
|
9e8292e68b | ||
|
fe1a034822 | ||
|
d61e070e08 | ||
|
db4350aab7 | ||
|
5976869b0a | ||
|
bf8c2c1516 | ||
|
dbb4aab071 | ||
|
1e488d720b | ||
|
e9398dd50d | ||
|
c00e14f5ff | ||
|
c8e6a511f4 | ||
|
9381af4289 | ||
|
68d0e17824 | ||
|
05ef149545 | ||
|
6312e89aba | ||
|
ccdd17551a | ||
|
9fd198f96a | ||
|
2ae8594d20 | ||
|
07beb68c7a | ||
|
11aaa193f5 | ||
|
cebb85a7fe | ||
|
d0214fad7d | ||
|
a57ba5d79f | ||
|
f8478835a2 | ||
|
79113498e7 | ||
|
b5d0e12a24 | ||
|
814ab19ecb | ||
|
0cb8227750 | ||
|
f747e2e550 | ||
|
5b4f50ce1b | ||
|
3cd61a0c93 | ||
|
65e9822ad6 | ||
|
4325d6c0c3 | ||
|
e06bfd1b7d | ||
|
a7d2057bc6 | ||
|
2978ad91c0 | ||
|
190e05e360 | ||
|
d23f2b373a | ||
|
6856462f1b | ||
|
536d40ad84 | ||
|
4ec780c87a | ||
|
3ca5255cde | ||
|
0974108a52 | ||
|
5a29efa336 | ||
|
9a47d8905f | ||
|
e6066769ca | ||
|
fba378ee39 | ||
|
faef4e9ee8 | ||
|
a8cc9cb70d | ||
|
76d7df5548 | ||
|
7e31ca15bc | ||
|
67a14ca756 | ||
|
0955c784b7 | ||
|
9e6505a930 | ||
|
89d8ac50a8 | ||
|
2540404b00 | ||
|
22dad5d6ca | ||
|
69c9f512a0 | ||
|
6290cc9db2 | ||
|
38a92229d7 | ||
|
675a865896 | ||
|
e9cddd63e4 | ||
|
9291b2a0b0 | ||
|
bff24c60b7 | ||
|
61e6b85e6a | ||
|
82610f17f8 | ||
|
c0ddc2ca70 | ||
|
7d2fe8c625 | ||
|
0549bbd604 | ||
|
dcc0770ca4 | ||
|
ad2b646700 | ||
|
f65512158b | ||
|
07c5d733d6 | ||
|
46f7db36c9 | ||
|
2cb7d441dc | ||
|
e362ca6213 | ||
|
2ab481f83e | ||
|
1c0602fa00 | ||
|
3744982cd9 | ||
|
b9f3681728 | ||
|
d49f702512 | ||
|
99deb87b9f | ||
|
eb1df31ac4 | ||
|
06056a8468 | ||
|
1cb1847aa6 | ||
|
76507623ac | ||
|
106d6fae11 | ||
|
02a163a10f | ||
|
87f850a44e | ||
|
d82c7f8ef2 | ||
|
8725bad18c | ||
|
da599c3a78 | ||
|
8af5288a60 | ||
|
5fe4f12d32 | ||
|
ae427849d5 | ||
|
d31ec28aa8 | ||
|
ac1b0b15fe | ||
|
b2249f189d | ||
|
af005a7669 | ||
|
d6569a6a22 | ||
|
0e4991fa26 | ||
|
72a9b302f9 | ||
|
f335253d4c | ||
|
605c3d938c |
2319 changed files with 50643 additions and 30560 deletions
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
liberapay: svartalf
|
||||||
|
patreon: svartalf
|
||||||
|
custom: ["https://svartalf.info/donate/", "https://www.buymeacoffee.com/svartalf"]
|
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "cargo" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
20
.github/workflows/audit.yml
vendored
Normal file
20
.github/workflows/audit.yml
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
name: Security audit
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 1 * *'
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- '**/Cargo.toml'
|
||||||
|
- '**/Cargo.lock'
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
audit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions-rs/audit-check@issue-104
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
13
.github/workflows/clippy-ng.yml
vendored
Normal file
13
.github/workflows/clippy-ng.yml
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
on: [push, pull_request]
|
||||||
|
name: Clippy (new version test, don't use it!)
|
||||||
|
jobs:
|
||||||
|
clippy_check_ng:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: nightly
|
||||||
|
components: clippy
|
||||||
|
override: true
|
||||||
|
- uses: actions-rs/clippy@master
|
16
.github/workflows/clippy_check.yml
vendored
Normal file
16
.github/workflows/clippy_check.yml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
on: [push, pull_request]
|
||||||
|
name: Clippy check
|
||||||
|
jobs:
|
||||||
|
clippy_check:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: nightly
|
||||||
|
components: clippy
|
||||||
|
override: true
|
||||||
|
- uses: actions-rs/clippy-check@v1
|
||||||
|
with:
|
||||||
|
args: --all-targets --all-features -- -D warnings
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
28
.github/workflows/cross_compile.yml
vendored
Normal file
28
.github/workflows/cross_compile.yml
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# We could use `@actions-rs/cargo` Action ability to automatically install `cross` tool
|
||||||
|
# in order to compile our application for some unusual targets.
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
name: Cross-compile
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
target:
|
||||||
|
- armv7-unknown-linux-gnueabihf
|
||||||
|
- powerpc64-unknown-linux-gnu
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
override: true
|
||||||
|
- uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
use-cross: true
|
||||||
|
command: build
|
||||||
|
args: --release --target=${{ matrix.target }}
|
66
.github/workflows/grcov.yml
vendored
Normal file
66
.github/workflows/grcov.yml
vendored
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
name: Code coverage with grcov
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
grcov:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
os:
|
||||||
|
- ubuntu-latest
|
||||||
|
- macOS-latest
|
||||||
|
# - windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: nightly
|
||||||
|
override: true
|
||||||
|
profile: minimal
|
||||||
|
|
||||||
|
- name: Execute tests
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
args: --all
|
||||||
|
env:
|
||||||
|
CARGO_INCREMENTAL: 0
|
||||||
|
RUSTFLAGS: "-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests"
|
||||||
|
|
||||||
|
# Note that `actions-rs/grcov` Action can install `grcov` too,
|
||||||
|
# but can't use faster installation methods yet.
|
||||||
|
# As a temporary experiment `actions-rs/install` Action plugged in here.
|
||||||
|
# Consider **NOT** to copy that into your workflow,
|
||||||
|
# but use `actions-rs/grcov` only
|
||||||
|
- name: Pre-installing grcov
|
||||||
|
uses: actions-rs/install@v0.1
|
||||||
|
with:
|
||||||
|
crate: grcov
|
||||||
|
use-tool-cache: true
|
||||||
|
|
||||||
|
- name: Gather coverage data
|
||||||
|
id: coverage
|
||||||
|
uses: actions-rs/grcov@v0.1
|
||||||
|
with:
|
||||||
|
coveralls-token: ${{ secrets.COVERALLS_TOKEN }}
|
||||||
|
|
||||||
|
- name: Coveralls upload
|
||||||
|
uses: coverallsapp/github-action@master
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
parallel: true
|
||||||
|
path-to-lcov: ${{ steps.coverage.outputs.report }}
|
||||||
|
|
||||||
|
grcov_finalize:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: grcov
|
||||||
|
steps:
|
||||||
|
- name: Coveralls finalization
|
||||||
|
uses: coverallsapp/github-action@master
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
parallel-finished: true
|
110
.github/workflows/msrv.yml
vendored
Normal file
110
.github/workflows/msrv.yml
vendored
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
# Based on https://github.com/actions-rs/meta/blob/master/recipes/msrv.md
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
name: MSRV
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
rust:
|
||||||
|
- stable
|
||||||
|
- 1.31.0
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.rust }}
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Run cargo check
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: check
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: Test Suite
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
rust:
|
||||||
|
- stable
|
||||||
|
- 1.31.0
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.rust }}
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Run cargo test
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
name: Rustfmt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
rust:
|
||||||
|
- stable
|
||||||
|
- 1.31.0
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.rust }}
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install rustfmt
|
||||||
|
run: rustup component add rustfmt
|
||||||
|
|
||||||
|
- name: Run cargo fmt
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
|
||||||
|
clippy:
|
||||||
|
name: Clippy
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
rust:
|
||||||
|
- stable
|
||||||
|
- 1.31.0
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: ${{ matrix.rust }}
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Install clippy
|
||||||
|
run: rustup component add clippy
|
||||||
|
|
||||||
|
- name: Run cargo clippy
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: -- -D warnings
|
78
.github/workflows/nightly_lints.yml
vendored
Normal file
78
.github/workflows/nightly_lints.yml
vendored
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
name: Nightly lints
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
clippy:
|
||||||
|
name: Clippy
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install nightly toolchain with clippy available
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: nightly
|
||||||
|
override: true
|
||||||
|
components: clippy
|
||||||
|
|
||||||
|
- name: Run cargo clippy
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: -- -D warnings
|
||||||
|
|
||||||
|
rustfmt:
|
||||||
|
name: Format
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install nightly toolchain with rustfmt available
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: nightly
|
||||||
|
override: true
|
||||||
|
components: rustfmt
|
||||||
|
|
||||||
|
- name: Run cargo fmt
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
|
||||||
|
combo:
|
||||||
|
name: Clippy + rustfmt
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install nightly toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: nightly
|
||||||
|
override: true
|
||||||
|
components: rustfmt, clippy
|
||||||
|
|
||||||
|
- name: Run cargo fmt
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
|
||||||
|
- name: Run cargo clippy
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: -- -D warnings
|
||||||
|
|
79
.github/workflows/quickstart.yml
vendored
Normal file
79
.github/workflows/quickstart.yml
vendored
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
# Based on https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md
|
||||||
|
#
|
||||||
|
# While our "example" application has the platform-specific code,
|
||||||
|
# for simplicity we are compiling and testing everything on the Ubuntu environment only.
|
||||||
|
# For multi-OS testing see the `cross.yml` workflow.
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
name: Quickstart
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
name: Check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Run cargo check
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: check
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: Test Suite
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Run cargo test
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: test
|
||||||
|
|
||||||
|
lints:
|
||||||
|
name: Lints
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout sources
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
components: rustfmt, clippy
|
||||||
|
|
||||||
|
- name: Run cargo fmt
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: fmt
|
||||||
|
args: --all -- --check
|
||||||
|
|
||||||
|
- name: Run cargo clippy
|
||||||
|
uses: actions-rs/cargo@v1
|
||||||
|
continue-on-error: true # WARNING: only for this example, remove it!
|
||||||
|
with:
|
||||||
|
command: clippy
|
||||||
|
args: -- -D warnings
|
13
.gitignore
vendored
13
.gitignore
vendored
|
@ -3,7 +3,7 @@
|
||||||
*.jar
|
*.jar
|
||||||
*jar
|
*jar
|
||||||
*~
|
*~
|
||||||
*.rs.bk
|
**/*.rs.bk
|
||||||
.s*
|
.s*
|
||||||
.*.sw*
|
.*.sw*
|
||||||
*.rs.bak
|
*.rs.bak
|
||||||
|
@ -15,6 +15,8 @@
|
||||||
.lein-plugins/
|
.lein-plugins/
|
||||||
.lein-repl-history
|
.lein-repl-history
|
||||||
.nrepl-port
|
.nrepl-port
|
||||||
|
.bundle/
|
||||||
|
docs/vendor/
|
||||||
/.lein-*
|
/.lein-*
|
||||||
/.nrepl-port
|
/.nrepl-port
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
|
@ -22,7 +24,7 @@ Cargo.lock
|
||||||
/classes/
|
/classes/
|
||||||
/node_modules/
|
/node_modules/
|
||||||
/out/
|
/out/
|
||||||
target/
|
/target
|
||||||
pom.xml
|
pom.xml
|
||||||
pom.xml.asc
|
pom.xml.asc
|
||||||
/.cljs_node_repl/
|
/.cljs_node_repl/
|
||||||
|
@ -81,9 +83,14 @@ build.xcarchive
|
||||||
## Obj-C/Swift specific
|
## Obj-C/Swift specific
|
||||||
*.hmap
|
*.hmap
|
||||||
*.ipa
|
*.ipa
|
||||||
|
/sdks/swift/Mentat/External-Dependencies
|
||||||
|
|
||||||
# Android & IntelliJ
|
# Android & IntelliJ
|
||||||
**/*.iml
|
**/*.iml
|
||||||
**/.idea
|
**/.idea
|
||||||
/sdks/android/**/local.properties
|
/sdks/android/**/local.properties
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
docs/_site
|
||||||
|
docs/.sass-cache
|
||||||
|
docs/.jekyll-metadata
|
||||||
|
|
1
.ignore
Normal file
1
.ignore
Normal file
|
@ -0,0 +1 @@
|
||||||
|
docs/
|
80
.taskcluster.yml
Normal file
80
.taskcluster.yml
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
version: 0
|
||||||
|
allowPullRequests: public
|
||||||
|
tasks:
|
||||||
|
####################################################################################################
|
||||||
|
# Task: Pull requests
|
||||||
|
####################################################################################################
|
||||||
|
- provisionerId: '{{ taskcluster.docker.provisionerId }}'
|
||||||
|
workerType: '{{ taskcluster.docker.workerType }}'
|
||||||
|
extra:
|
||||||
|
github:
|
||||||
|
env: true
|
||||||
|
events:
|
||||||
|
- pull_request.opened
|
||||||
|
- pull_request.edited
|
||||||
|
- pull_request.synchronize
|
||||||
|
- pull_request.reopened
|
||||||
|
- push
|
||||||
|
scopes:
|
||||||
|
- "queue:create-task:aws-provisioner-v1/github-worker"
|
||||||
|
- "queue:scheduler-id:taskcluster-github"
|
||||||
|
payload:
|
||||||
|
maxRunTime: 3600
|
||||||
|
deadline: "{{ '2 hours' | $fromNow }}"
|
||||||
|
image: 'mozillamobile/android-components:1.4'
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
- '--login'
|
||||||
|
- '-cx'
|
||||||
|
- >-
|
||||||
|
export TERM=dumb
|
||||||
|
&& git fetch {{ event.head.repo.url }} {{ event.head.repo.branch }}
|
||||||
|
&& git config advice.detachedHead false
|
||||||
|
&& git checkout {{event.head.sha}}
|
||||||
|
&& python automation/taskcluster/decision_task_pull_request.py
|
||||||
|
features:
|
||||||
|
taskclusterProxy: true
|
||||||
|
metadata:
|
||||||
|
name: Mentat Android SDK - Pull Request
|
||||||
|
description: Building and testing the Mentat Android SDK - triggered by a pull request.
|
||||||
|
owner: '{{ event.head.user.email }}'
|
||||||
|
source: '{{ event.head.repo.url }}'
|
||||||
|
####################################################################################################
|
||||||
|
# Task: Release
|
||||||
|
####################################################################################################
|
||||||
|
- provisionerId: '{{ taskcluster.docker.provisionerId }}'
|
||||||
|
workerType: '{{ taskcluster.docker.workerType }}'
|
||||||
|
extra:
|
||||||
|
github:
|
||||||
|
events:
|
||||||
|
- release
|
||||||
|
scopes:
|
||||||
|
- "secrets:get:project/mentat/publish"
|
||||||
|
payload:
|
||||||
|
maxRunTime: 3600
|
||||||
|
deadline: "{{ '2 hours' | $fromNow }}"
|
||||||
|
image: 'mozillamobile/mentat:1.2'
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
- '--login'
|
||||||
|
- '-cx'
|
||||||
|
- >-
|
||||||
|
export TERM=dumb
|
||||||
|
&& git fetch origin --tags
|
||||||
|
&& git config advice.detachedHead false
|
||||||
|
&& git checkout {{ event.version }}
|
||||||
|
&& python automation/taskcluster/release/fetch-bintray-api-key.py
|
||||||
|
&& cd sdks/android/Mentat
|
||||||
|
&& ./gradlew --no-daemon clean library:assembleRelease
|
||||||
|
&& VCS_TAG=`git show-ref {{ event.version }}` ./gradlew bintrayUpload --debug -PvcsTag="$VCS_TAG"
|
||||||
|
features:
|
||||||
|
taskclusterProxy: true
|
||||||
|
metadata:
|
||||||
|
name: Mentat Android SDK - Release ({{ event.version }})
|
||||||
|
description: Building and publishing release versions.
|
||||||
|
owner: '{{ event.head.user.email }}'
|
||||||
|
source: '{{ event.head.repo.url }}'
|
64
.travis.yml
64
.travis.yml
|
@ -1,11 +1,53 @@
|
||||||
language: rust
|
language: rust
|
||||||
|
env:
|
||||||
|
- CARGO_INCREMENTAL=0
|
||||||
|
# https://bheisler.github.io/post/efficient-use-of-travis-ci-cache-for-rust/
|
||||||
|
before_cache:
|
||||||
|
# Delete loose files in the debug directory
|
||||||
|
- find ./target/debug -maxdepth 1 -type f -delete
|
||||||
|
# Delete the test and benchmark executables. Finding these all might take some
|
||||||
|
# experimentation.
|
||||||
|
- rm -rf ./target/debug/deps/criterion*
|
||||||
|
- rm -rf ./target/debug/deps/bench*
|
||||||
|
# Delete the associated metadata files for those executables
|
||||||
|
- rm -rf ./target/debug/.fingerprint/criterion*
|
||||||
|
- rm -rf ./target/debug/.fingerprint/bench*
|
||||||
|
# Note that all of the above need to be repeated for `release/` instead of
|
||||||
|
# `debug/` if your build script builds artifacts in release mode.
|
||||||
|
# This is just more metadata
|
||||||
|
- rm -f ./target/.rustc_info.json
|
||||||
|
# Also delete the saved benchmark data from the test benchmarks. If you
|
||||||
|
# have Criterion.rs benchmarks, you'll probably want to do this as well, or set
|
||||||
|
# the CRITERION_HOME environment variable to move that data out of the
|
||||||
|
# `target/` directory.
|
||||||
|
- rm -rf ./target/criterion
|
||||||
|
# Also delete cargo's registry index. This is updated on every build, but it's
|
||||||
|
# way cheaper to re-download than the whole cache is.
|
||||||
|
- rm -rf "$TRAVIS_HOME/.cargo/registry/index/"
|
||||||
|
- rm -rf "$TRAVIS_HOME/.cargo/registry/src"
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- ./target
|
||||||
|
- $TRAVIS_HOME/.cache/sccache
|
||||||
|
- $TRAVIS_HOME/.cargo/
|
||||||
|
- $TRAVIS_HOME/.rustup/
|
||||||
|
before_script:
|
||||||
|
- cargo install --force cargo-audit
|
||||||
|
- cargo generate-lockfile
|
||||||
|
- rustup component add clippy-preview
|
||||||
|
script:
|
||||||
|
- cargo audit
|
||||||
# We use OSX so that we can get a reasonably up to date version of SQLCipher.
|
# We use OSX so that we can get a reasonably up to date version of SQLCipher.
|
||||||
# (The version in Travis's default Ubuntu Trusty is much too old).
|
# (The version in Travis's default Ubuntu Trusty is much too old).
|
||||||
os: osx
|
os: osx
|
||||||
before_install:
|
before_install:
|
||||||
- brew install sqlcipher --with-fts
|
- brew install sqlcipher
|
||||||
rust:
|
rust:
|
||||||
- 1.25.0 # Must align with `build/version.rs`.
|
- 1.43.0
|
||||||
|
- 1.44.0
|
||||||
|
- 1.45.0
|
||||||
|
- 1.46.0
|
||||||
|
- 1.47.0
|
||||||
- stable
|
- stable
|
||||||
- beta
|
- beta
|
||||||
- nightly
|
- nightly
|
||||||
|
@ -13,14 +55,24 @@ matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- rust: nightly
|
- rust: nightly
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
|
jobs:
|
||||||
|
include:
|
||||||
|
- stage: "Test iOS"
|
||||||
|
rust: 1.47.0
|
||||||
|
script: ./scripts/test-ios.sh
|
||||||
|
- stage: "Docs"
|
||||||
|
rust: 1.47.0
|
||||||
|
script: ./scripts/cargo-doc.sh
|
||||||
script:
|
script:
|
||||||
|
- cargo build --verbose --all
|
||||||
|
- cargo clippy --all-targets --all-features -- -D warnings -A clippy::comparison-chain -A clippy::many-single-char-names # Check tests and non-default crate features.
|
||||||
- cargo test --verbose --all
|
- cargo test --verbose --all
|
||||||
|
- cargo test --features edn/serde_support --verbose --all
|
||||||
# We can't pick individual features out with `cargo test --all` (At the time of this writing, this
|
# We can't pick individual features out with `cargo test --all` (At the time of this writing, this
|
||||||
# works but does the wrong thing because of a bug in cargo, but its fix will be to disallow doing
|
# works but does the wrong thing because of a bug in cargo, but its fix will be to disallow doing
|
||||||
# this all-together, see https://github.com/rust-lang/cargo/issues/5364 for more information). To
|
# this all-together, see https://github.com/rust-lang/cargo/issues/5364 for more information). To
|
||||||
# work around this, we run individual tests for each subcrate individually.
|
# work around this, we run tests individually for sub-crates that rely on `rusqlite`.
|
||||||
- |
|
- |
|
||||||
for manifest in $(find . -type f -name Cargo.toml); do
|
for crate in "" "db" "db-traits" "ffi" "public-traits" "query-projector" "query-projector-traits" "query-pull" "sql" "tolstoy" "tolstoy-traits" "transaction" "tools/cli"; do
|
||||||
cargo test --manifest-path $manifest --verbose --no-default-features --features sqlcipher
|
cargo test --manifest-path ./$crate/Cargo.toml --verbose --no-default-features --features sqlcipher
|
||||||
done
|
done
|
||||||
cache: cargo
|
|
||||||
|
|
39
CHANGELOG.md
Normal file
39
CHANGELOG.md
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# 0.11.1 (2018-08-09)
|
||||||
|
|
||||||
|
* sdks/android compiled against:
|
||||||
|
* Kotlin standard library 1.2.41
|
||||||
|
|
||||||
|
* **API changes**: Changed wording of MentatError::ConflictingAttributeDefinitions, MentatError::ExistingVocabularyTooNew, MentatError::UnexpectedCoreSchema.
|
||||||
|
|
||||||
|
* [Commits](https://github.com/mozilla/mentat/compare/v0.11.0...v0.11.1)
|
||||||
|
|
||||||
|
# 0.11 (2018-07-31)
|
||||||
|
|
||||||
|
* sdks/android compiled against:
|
||||||
|
* Kotlin standard library 1.2.41
|
||||||
|
|
||||||
|
* **sdks/android**: `Mentat()` constructor replaced with `open` factory method.
|
||||||
|
|
||||||
|
* [Commits](https://github.com/mozilla/mentat/compare/v0.10.0...v0.11.0)
|
||||||
|
|
||||||
|
# 0.10 (2018-07-26)
|
||||||
|
|
||||||
|
* sdks/android compiled against:
|
||||||
|
* Kotlin standard library 1.2.41
|
||||||
|
|
||||||
|
* **API changes**:
|
||||||
|
* `store_open{_encrypted}` now accepts an error parameter; corresponding constructors changed to be factory functions.
|
||||||
|
|
||||||
|
* [Commits](https://github.com/mozilla/mentat/compare/v0.9.0...v0.10.0)
|
||||||
|
|
||||||
|
# 0.9 (2018-07-25)
|
||||||
|
|
||||||
|
* sdks/android compiled against:
|
||||||
|
* Kotlin standard library 1.2.41
|
||||||
|
|
||||||
|
* **API changes**:
|
||||||
|
* Mentat partitions now enforce their integrity, denying entids that aren't already known.
|
||||||
|
|
||||||
|
* **sdks/android**: First version published to nalexander's personal bintray repository.
|
||||||
|
* Various bugfixes and refactorings (see commits below for details)
|
||||||
|
* [Commits](https://github.com/mozilla/mentat/compare/v0.8.1...v0.9.0)
|
75
Cargo.toml
75
Cargo.toml
|
@ -1,4 +1,5 @@
|
||||||
[package]
|
[package]
|
||||||
|
edition = "2021"
|
||||||
authors = [
|
authors = [
|
||||||
"Richard Newman <rnewman@twinql.com>",
|
"Richard Newman <rnewman@twinql.com>",
|
||||||
"Nicholas Alexander <nalexander@mozilla.com>",
|
"Nicholas Alexander <nalexander@mozilla.com>",
|
||||||
|
@ -10,40 +11,56 @@ authors = [
|
||||||
"Kit Cambridge <kit@yakshaving.ninja>",
|
"Kit Cambridge <kit@yakshaving.ninja>",
|
||||||
"Edouard Oger <eoger@fastmail.com>",
|
"Edouard Oger <eoger@fastmail.com>",
|
||||||
"Thom Chiovoloni <tchiovoloni@mozilla.com>",
|
"Thom Chiovoloni <tchiovoloni@mozilla.com>",
|
||||||
|
"Gregory Burd <greg@burd.me>",
|
||||||
]
|
]
|
||||||
name = "mentat"
|
name = "mentat"
|
||||||
version = "0.7.0"
|
version = "0.14.0"
|
||||||
build = "build/version.rs"
|
build = "build/version.rs"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["bundled_sqlite3"]
|
default = ["bundled_sqlite3", "syncable"]
|
||||||
bundled_sqlite3 = ["rusqlite/bundled"]
|
bundled_sqlite3 = ["rusqlite/bundled"]
|
||||||
sqlcipher = ["rusqlite/sqlcipher", "mentat_db/sqlcipher"]
|
sqlcipher = ["rusqlite/sqlcipher", "mentat_db/sqlcipher"]
|
||||||
|
syncable = ["mentat_tolstoy", "tolstoy_traits", "mentat_db/syncable"]
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = ["tools/cli", "ffi"]
|
members = [
|
||||||
|
"tools/cli",
|
||||||
|
"ffi", "core", "core-traits","db", "db-traits", "edn", "public-traits", "query-algebrizer",
|
||||||
|
"query-algebrizer-traits", "query-projector", "query-projector-traits","query-pull",
|
||||||
|
"query-sql", "sql", "sql-traits", "tolstoy-traits", "tolstoy", "transaction"
|
||||||
|
]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
rustc_version = "0.2"
|
rustc_version = "~0.4"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
assert_approx_eq = "~1.1"
|
||||||
|
|
||||||
|
#[dev-dependencies.cargo-husky]
|
||||||
|
#version = "1"
|
||||||
|
#default-features = false # Disable features which are enabled by default
|
||||||
|
#features = ["run-for-all", "precommit-hook", "run-cargo-fmt", "run-cargo-test", "run-cargo-check", "run-cargo-clippy"]
|
||||||
|
#cargo audit
|
||||||
|
#cargo outdated
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = "0.4"
|
chrono = "~0.4"
|
||||||
failure = "0.1.1"
|
failure = "~0.1"
|
||||||
failure_derive = "0.1.1"
|
lazy_static = "~1.4"
|
||||||
lazy_static = "0.2"
|
time = "0.3.1"
|
||||||
time = "0.1"
|
log = "~0.4"
|
||||||
uuid = { version = "0.5", features = ["v4", "serde"] }
|
uuid = { version = "~1", features = ["v4", "serde"] }
|
||||||
|
|
||||||
[dependencies.rusqlite]
|
[dependencies.rusqlite]
|
||||||
version = "0.13"
|
version = "~0.29"
|
||||||
# System sqlite might be very old.
|
features = ["limits", "bundled"]
|
||||||
features = ["limits"]
|
|
||||||
|
|
||||||
[dependencies.edn]
|
[dependencies.edn]
|
||||||
path = "edn"
|
path = "edn"
|
||||||
|
|
||||||
[dependencies.mentat_parser_utils]
|
[dependencies.core_traits]
|
||||||
path = "parser-utils"
|
path = "core-traits"
|
||||||
|
|
||||||
[dependencies.mentat_core]
|
[dependencies.mentat_core]
|
||||||
path = "core"
|
path = "core"
|
||||||
|
@ -54,26 +71,46 @@ path = "sql"
|
||||||
[dependencies.mentat_db]
|
[dependencies.mentat_db]
|
||||||
path = "db"
|
path = "db"
|
||||||
|
|
||||||
[dependencies.mentat_query]
|
[dependencies.db_traits]
|
||||||
path = "query"
|
path = "db-traits"
|
||||||
|
|
||||||
[dependencies.mentat_query_algebrizer]
|
[dependencies.mentat_query_algebrizer]
|
||||||
path = "query-algebrizer"
|
path = "query-algebrizer"
|
||||||
|
|
||||||
|
[dependencies.query_algebrizer_traits]
|
||||||
|
path = "query-algebrizer-traits"
|
||||||
|
|
||||||
[dependencies.mentat_query_projector]
|
[dependencies.mentat_query_projector]
|
||||||
path = "query-projector"
|
path = "query-projector"
|
||||||
|
|
||||||
|
[dependencies.query_projector_traits]
|
||||||
|
path = "query-projector-traits"
|
||||||
|
|
||||||
[dependencies.mentat_query_pull]
|
[dependencies.mentat_query_pull]
|
||||||
path = "query-pull"
|
path = "query-pull"
|
||||||
|
|
||||||
|
[dependencies.query_pull_traits]
|
||||||
|
path = "query-pull-traits"
|
||||||
|
|
||||||
[dependencies.mentat_query_sql]
|
[dependencies.mentat_query_sql]
|
||||||
path = "query-sql"
|
path = "query-sql"
|
||||||
|
|
||||||
[dependencies.mentat_query_translator]
|
[dependencies.sql_traits]
|
||||||
path = "query-translator"
|
path = "sql-traits"
|
||||||
|
|
||||||
|
[dependencies.public_traits]
|
||||||
|
path = "public-traits"
|
||||||
|
|
||||||
|
[dependencies.mentat_transaction]
|
||||||
|
path = "transaction"
|
||||||
|
|
||||||
[dependencies.mentat_tolstoy]
|
[dependencies.mentat_tolstoy]
|
||||||
path = "tolstoy"
|
path = "tolstoy"
|
||||||
|
optional = true
|
||||||
|
|
||||||
|
[dependencies.tolstoy_traits]
|
||||||
|
path = "tolstoy-traits"
|
||||||
|
optional = true
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|
11
Makefile
Normal file
11
Makefile
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
.PHONY: outdated fix
|
||||||
|
|
||||||
|
outdated:
|
||||||
|
for p in $(dirname $(ls Cargo.toml */Cargo.toml */*/Cargo.toml)); do echo $p; (cd $p; cargo outdated -R); done
|
||||||
|
|
||||||
|
|
||||||
|
fix:
|
||||||
|
$(for p in $(dirname $(ls Cargo.toml */Cargo.toml */*/Cargo.toml)); do echo $p; (cd $p; cargo fix --allow-dirty --broken-code --edition-idioms); done)
|
||||||
|
|
||||||
|
upgrades:
|
||||||
|
cargo upgrades
|
29
NOTES
Normal file
29
NOTES
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
* sqlite -> monetdb-lite-c + fts5 + bayesdb
|
||||||
|
* fts5 + regex + tre/fuzzy + codesearch/trigram filters, streaming bloom filters https://arxiv.org/abs/2001.03147
|
||||||
|
* datalog to "goblin relational engine" (gtk)
|
||||||
|
* branching distributed wal (chain replication) and CRDTs
|
||||||
|
* alf:fn query language
|
||||||
|
* datatypes via bit syntax+some code?
|
||||||
|
* pure lang?
|
||||||
|
|
||||||
|
* https://github.com/dahjelle/pouch-datalog
|
||||||
|
* https://github.com/edn-query-language/eql
|
||||||
|
* https://github.com/borkdude/jet
|
||||||
|
* https://github.com/walmartlabs/dyn-edn
|
||||||
|
* https://github.com/go-edn/edn
|
||||||
|
* https://github.com/smothers/cause
|
||||||
|
* https://github.com/oscaro/eq
|
||||||
|
* https://github.com/clojure-emacs/parseedn
|
||||||
|
* https://github.com/exoscale/seql
|
||||||
|
* https://github.com/axboe/liburing
|
||||||
|
|
||||||
|
* (EAVtf) - entity attribute value type flags
|
||||||
|
|
||||||
|
* distributed, replicated WAL
|
||||||
|
* https://github.com/mirage/irmin
|
||||||
|
|
||||||
|
* What if facts had "confidence" [0-1)?
|
||||||
|
* entity attribute value type flags
|
||||||
|
* https://github.com/probcomp/BayesDB
|
||||||
|
* https://github.com/probcomp/bayeslite
|
||||||
|
* http://probcomp.csail.mit.edu/software/bayesdb/
|
25
README.md
25
README.md
|
@ -1,18 +1,19 @@
|
||||||
# Project Mentat
|
# Project Mentat
|
||||||
|
[![Build Status](https://travis-ci.org/qpdb/mentat.svg?branch=master)](https://travis-ci.org/qpdb/mentat)
|
||||||
|
|
||||||
Project Mentat is a persistent, embedded knowledge base. It draws heavily on [DataScript](https://github.com/tonsky/datascript) and [Datomic](http://datomic.com).
|
Project Mentat is a persistent, embedded knowledge base. It draws heavily on [DataScript](https://github.com/tonsky/datascript) and [Datomic](http://datomic.com).
|
||||||
|
|
||||||
Mentat is implemented in Rust.
|
This project was started by Mozilla, but [is no longer being developed or actively maintained by them](https://mail.mozilla.org/pipermail/firefox-dev/2018-September/006780.html). [Their repository](https://github.com/mozilla/mentat) was marked read-only, [this fork](https://github.com/qpdb/mentat) is an attempt to revive and continue that interesting work. We owe the team at Mozilla more than words can express for inspiring us all and for this project in particular.
|
||||||
|
|
||||||
The first version of Project Mentat, named Datomish, [was written in ClojureScript](https://github.com/mozilla/mentat/tree/clojure), targeting both Node (on top of `promise_sqlite`) and Firefox (on top of `Sqlite.jsm`). It also worked in pure Clojure on the JVM on top of `jdbc-sqlite`. The name was changed to avoid confusion with [Datomic](http://datomic.com).
|
*Thank you*.
|
||||||
|
|
||||||
The Rust implementation gives us a smaller compiled output, better performance, more type safety, better tooling, and easier deployment into Firefox and mobile platforms.
|
[Documentation](https://docs.rs/mentat)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Motivation
|
## Motivation
|
||||||
|
|
||||||
Mentat is intended to be a flexible relational (not key-value, not document-oriented) store that makes it easy to describe, grow, and reuse your domain schema.
|
Mentat is a flexible relational (not key-value, not document-oriented) store that makes it easy to describe, grow, and reuse your domain schema.
|
||||||
|
|
||||||
By abstracting away the storage schema, and by exposing change listeners outside the database (not via triggers), we hope to make domain schemas stable, and allow both the data store itself and embedding applications to use better architectures, meeting performance goals in a way that allows future evolution.
|
By abstracting away the storage schema, and by exposing change listeners outside the database (not via triggers), we hope to make domain schemas stable, and allow both the data store itself and embedding applications to use better architectures, meeting performance goals in a way that allows future evolution.
|
||||||
|
|
||||||
|
@ -72,9 +73,11 @@ We've observed that data storage is a particular area of difficulty for software
|
||||||
|
|
||||||
DataScript asks the question: "What if creating a database were as cheap as creating a Hashmap?"
|
DataScript asks the question: "What if creating a database were as cheap as creating a Hashmap?"
|
||||||
|
|
||||||
Mentat is not interested in that. Instead, it's strongly interested in persistence and performance, with very little interest in immutable databases/databases as values or throwaway use.
|
Mentat is not interested in that. Instead, it's focused on persistence and performance, with very little interest in immutable databases/databases as values or throwaway use.
|
||||||
|
|
||||||
One might say that Mentat's question is: "What if an SQLite database could store arbitrary relations, for arbitrary consumers, without them having to coordinate an up-front storage-level schema?"
|
One might say that Mentat's question is: "What if a database could store arbitrary relations, for arbitrary consumers, without them having to coordinate an up-front storage-level schema?"
|
||||||
|
|
||||||
|
Consider this a practical approach to facts, to knowledge its storage and access, much like SQLite is a practical RDBMS.
|
||||||
|
|
||||||
(Note that [domain-level schemas are very valuable](http://martinfowler.com/articles/schemaless/).)
|
(Note that [domain-level schemas are very valuable](http://martinfowler.com/articles/schemaless/).)
|
||||||
|
|
||||||
|
@ -84,7 +87,7 @@ Some thought has been given to how databases as values — long-term references
|
||||||
|
|
||||||
Just like DataScript, Mentat speaks Datalog for querying and takes additions and retractions as input to a transaction.
|
Just like DataScript, Mentat speaks Datalog for querying and takes additions and retractions as input to a transaction.
|
||||||
|
|
||||||
Unlike DataScript, Mentat exposes free-text indexing, thanks to SQLite.
|
Unlike DataScript, Mentat exposes free-text indexing, thanks to SQLite/FTS.
|
||||||
|
|
||||||
|
|
||||||
## Comparison to Datomic
|
## Comparison to Datomic
|
||||||
|
@ -93,8 +96,6 @@ Datomic is a server-side, enterprise-grade data storage system. Datomic has a be
|
||||||
|
|
||||||
Many of these design decisions are inapplicable to deployed desktop software; indeed, the use of multiple JVM processes makes Datomic's use in a small desktop app, or a mobile device, prohibitive.
|
Many of these design decisions are inapplicable to deployed desktop software; indeed, the use of multiple JVM processes makes Datomic's use in a small desktop app, or a mobile device, prohibitive.
|
||||||
|
|
||||||
Mentat was designed for embedding, initially in an experimental Electron app ([Tofino](https://github.com/mozilla/tofino)). It is less concerned with exposing consistent database states outside transaction boundaries, because that's less important here, and dropping some of these requirements allows us to leverage SQLite itself.
|
|
||||||
|
|
||||||
|
|
||||||
## Comparison to SQLite
|
## Comparison to SQLite
|
||||||
|
|
||||||
|
@ -169,10 +170,6 @@ This is the lowest-level Mentat crate. It collects together the following things
|
||||||
- Common utilities (some in the `util` module, and others that should be moved there or broken out) like `Either`, `InternSet`, and `RcCounter`.
|
- Common utilities (some in the `util` module, and others that should be moved there or broken out) like `Either`, `InternSet`, and `RcCounter`.
|
||||||
- Reusable lazy namespaced keywords (_e.g._, `DB_TYPE_DOUBLE`) that are used by `mentat_db` and EDN serialization of core structs.
|
- Reusable lazy namespaced keywords (_e.g._, `DB_TYPE_DOUBLE`) that are used by `mentat_db` and EDN serialization of core structs.
|
||||||
|
|
||||||
#### `mentat_parser_utils`
|
|
||||||
|
|
||||||
This is a utility library for writing `combine` parsers over streams of `edn::Value`/`edn::ValueAndSpan`.
|
|
||||||
|
|
||||||
### Types
|
### Types
|
||||||
|
|
||||||
#### `mentat_query`
|
#### `mentat_query`
|
||||||
|
@ -211,7 +208,7 @@ The top-level main crate of Mentat assembles these component crates into somethi
|
||||||
|
|
||||||
### Syncing
|
### Syncing
|
||||||
|
|
||||||
Sync code lives, for [referential reasons](https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying), in a crate named `tolstoy`. This code is a work in progress.
|
Sync code lives, for [referential reasons](https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying), in a crate named `tolstoy`. This code is a work in progress; current state is a proof-of-concept implementation which largely relies on the internal transactor to make progress in most cases and comes with a basic support for timelines. See [Tolstoy's documentation](https://github.com/mozilla/mentat/tree/master/tolstoy/README.md) for details.
|
||||||
|
|
||||||
### The command-line interface
|
### The command-line interface
|
||||||
|
|
||||||
|
|
36
automation/docker/Dockerfile
Normal file
36
automation/docker/Dockerfile
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
FROM mozillamobile/rust-component:buildtools-27.0.3-ndk-r17b-ndk-version-26-rust-stable-rust-beta
|
||||||
|
|
||||||
|
MAINTAINER Nick Alexander "nalexander@mozilla.com"
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
#-- Project -----------------------------------------------------------------------------------------------------------
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ENV PROJECT_REPOSITORY "https://github.com/mozilla/mentat.git"
|
||||||
|
|
||||||
|
RUN git clone $PROJECT_REPOSITORY
|
||||||
|
|
||||||
|
WORKDIR /build/mentat
|
||||||
|
|
||||||
|
# Temporary.
|
||||||
|
RUN git fetch origin master && git checkout origin/generic-automation-images && git show-ref HEAD
|
||||||
|
|
||||||
|
# Populate dependencies.
|
||||||
|
RUN ./sdks/android/Mentat/gradlew --no-daemon -p sdks/android/Mentat tasks
|
||||||
|
|
||||||
|
# Build Rust.
|
||||||
|
RUN ./sdks/android/Mentat/gradlew --no-daemon -p sdks/android/Mentat cargoBuild
|
||||||
|
|
||||||
|
# Actually build. In the future, we might also lint (to cache additional dependencies).
|
||||||
|
RUN ./sdks/android/Mentat/gradlew --no-daemon -p sdks/android/Mentat assemble test
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
# -- Cleanup ----------------------------------------------------------------------------------------------------------
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Drop built Rust artifacts.
|
||||||
|
RUN cargo clean
|
81
automation/docker/generic/Dockerfile
Normal file
81
automation/docker/generic/Dockerfile
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
FROM mozillamobile/android-components:1.4
|
||||||
|
|
||||||
|
MAINTAINER Nick Alexander "nalexander@mozilla.com"
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
#-- Configuration -----------------------------------------------------------------------------------------------------
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ENV ANDROID_NDK_VERSION "r17b"
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
#-- System ------------------------------------------------------------------------------------------------------------
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
RUN apt-get update -qq
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
#-- Android NDK (Android SDK comes from base `android-components` image) ----------------------------------------------
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
RUN mkdir -p /build
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
|
ENV ANDROID_NDK_HOME /build/android-ndk
|
||||||
|
|
||||||
|
RUN curl -L https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip > ndk.zip \
|
||||||
|
&& unzip ndk.zip -d /build \
|
||||||
|
&& rm ndk.zip \
|
||||||
|
&& mv /build/android-ndk-${ANDROID_NDK_VERSION} ${ANDROID_NDK_HOME}
|
||||||
|
|
||||||
|
ENV ANDROID_NDK_TOOLCHAIN_DIR /build/android-ndk-toolchain
|
||||||
|
ENV ANDROID_NDK_API_VERSION 26
|
||||||
|
|
||||||
|
RUN set -eux; \
|
||||||
|
python "$ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py" --arch="arm" --api="$ANDROID_NDK_API_VERSION" --install-dir="$ANDROID_NDK_TOOLCHAIN_DIR/arm-$ANDROID_NDK_API_VERSION" --force; \
|
||||||
|
python "$ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py" --arch="arm64" --api="$ANDROID_NDK_API_VERSION" --install-dir="$ANDROID_NDK_TOOLCHAIN_DIR/arm64-$ANDROID_NDK_API_VERSION" --force; \
|
||||||
|
python "$ANDROID_NDK_HOME/build/tools/make_standalone_toolchain.py" --arch="x86" --api="$ANDROID_NDK_API_VERSION" --install-dir="$ANDROID_NDK_TOOLCHAIN_DIR/x86-$ANDROID_NDK_API_VERSION" --force
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
#-- Rust (cribbed from https://github.com/rust-lang-nursery/docker-rust/blob/ced83778ec6fea7f63091a484946f95eac0ee611/1.27.1/stretch/Dockerfile)
|
||||||
|
#-- Rust is after the Android NDK since Rust rolls forward more frequently. Both stable and beta for advanced consumers.
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ENV RUSTUP_HOME=/usr/local/rustup \
|
||||||
|
CARGO_HOME=/usr/local/cargo \
|
||||||
|
PATH=/usr/local/cargo/bin:$PATH \
|
||||||
|
RUST_VERSION=1.27.1
|
||||||
|
|
||||||
|
RUN set -eux; \
|
||||||
|
rustArch='x86_64-unknown-linux-gnu'; rustupSha256='4d382e77fd6760282912d2d9beec5e260ec919efd3cb9bdb64fe1207e84b9d91'; \
|
||||||
|
url="https://static.rust-lang.org/rustup/archive/1.12.0/${rustArch}/rustup-init"; \
|
||||||
|
wget "$url"; \
|
||||||
|
echo "${rustupSha256} *rustup-init" | sha256sum -c -; \
|
||||||
|
chmod +x rustup-init; \
|
||||||
|
./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION; \
|
||||||
|
rm rustup-init; \
|
||||||
|
chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \
|
||||||
|
rustup --version; \
|
||||||
|
cargo --version; \
|
||||||
|
rustc --version; \
|
||||||
|
rustup target add i686-linux-android; \
|
||||||
|
rustup target add armv7-linux-androideabi; \
|
||||||
|
rustup target add aarch64-linux-android
|
||||||
|
|
||||||
|
RUN set -eux; \
|
||||||
|
rustup install beta; \
|
||||||
|
rustup target add --toolchain beta i686-linux-android; \
|
||||||
|
rustup target add --toolchain beta armv7-linux-androideabi; \
|
||||||
|
rustup target add --toolchain beta aarch64-linux-android
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
# -- Cleanup ----------------------------------------------------------------------------------------------------------
|
||||||
|
#----------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
|
RUN apt-get clean
|
122
automation/taskcluster/decision_task_pull_request.py
Normal file
122
automation/taskcluster/decision_task_pull_request.py
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import taskcluster
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
Decision task for pull requests
|
||||||
|
"""
|
||||||
|
|
||||||
|
TASK_ID = os.environ.get('TASK_ID')
|
||||||
|
REPO_URL = os.environ.get('GITHUB_HEAD_REPO_URL')
|
||||||
|
BRANCH = os.environ.get('GITHUB_HEAD_BRANCH')
|
||||||
|
COMMIT = os.environ.get('GITHUB_HEAD_SHA')
|
||||||
|
|
||||||
|
def fetch_module_names():
|
||||||
|
process = subprocess.Popen(["./gradlew", "--no-daemon", "printModules"], stdout=subprocess.PIPE,
|
||||||
|
cwd=os.path.join(os.getcwd(), "sdks", "android", "Mentat"))
|
||||||
|
(output, err) = process.communicate()
|
||||||
|
exit_code = process.wait()
|
||||||
|
|
||||||
|
if exit_code is not 0:
|
||||||
|
print "Gradle command returned error:", exit_code
|
||||||
|
|
||||||
|
return re.findall('module: (.*)', output, re.M)
|
||||||
|
|
||||||
|
|
||||||
|
def schedule_task(queue, taskId, task):
|
||||||
|
print "TASK", taskId
|
||||||
|
print json.dumps(task, indent=4, separators=(',', ': '))
|
||||||
|
|
||||||
|
result = queue.createTask(taskId, task)
|
||||||
|
print "RESULT", taskId
|
||||||
|
print json.dumps(result, indent=4, separators=(',', ': '))
|
||||||
|
|
||||||
|
|
||||||
|
def create_task(name, description, command):
|
||||||
|
created = datetime.datetime.now()
|
||||||
|
expires = taskcluster.fromNow('1 year')
|
||||||
|
deadline = taskcluster.fromNow('1 day')
|
||||||
|
|
||||||
|
return {
|
||||||
|
"workerType": 'github-worker',
|
||||||
|
"taskGroupId": TASK_ID,
|
||||||
|
"expires": taskcluster.stringDate(expires),
|
||||||
|
"retries": 5,
|
||||||
|
"created": taskcluster.stringDate(created),
|
||||||
|
"tags": {},
|
||||||
|
"priority": "lowest",
|
||||||
|
"schedulerId": "taskcluster-github",
|
||||||
|
"deadline": taskcluster.stringDate(deadline),
|
||||||
|
"dependencies": [ TASK_ID ],
|
||||||
|
"routes": [],
|
||||||
|
"scopes": [],
|
||||||
|
"requires": "all-completed",
|
||||||
|
"payload": {
|
||||||
|
"features": {},
|
||||||
|
"maxRunTime": 7200,
|
||||||
|
"image": "mozillamobile/mentat:1.2",
|
||||||
|
"command": [
|
||||||
|
"/bin/bash",
|
||||||
|
"--login",
|
||||||
|
"-cx",
|
||||||
|
"export TERM=dumb && git fetch %s %s && git config advice.detachedHead false && git checkout %s && cd sdks/android/Mentat && ./gradlew --no-daemon clean %s" % (REPO_URL, BRANCH, COMMIT, command)
|
||||||
|
],
|
||||||
|
"artifacts": {},
|
||||||
|
"deadline": taskcluster.stringDate(deadline)
|
||||||
|
},
|
||||||
|
"provisionerId": "aws-provisioner-v1",
|
||||||
|
"metadata": {
|
||||||
|
"name": name,
|
||||||
|
"description": description,
|
||||||
|
"owner": "nalexander@mozilla.com",
|
||||||
|
"source": "https://github.com/mozilla/mentat"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def create_module_task(module):
|
||||||
|
return create_task(
|
||||||
|
name='Mentat Android SDK - Module ' + module,
|
||||||
|
description='Building and testing module ' + module,
|
||||||
|
command=" ".join(map(lambda x: module + ":" + x, ['assemble', 'test', 'lint'])))
|
||||||
|
|
||||||
|
|
||||||
|
# def create_detekt_task():
|
||||||
|
# return create_task(
|
||||||
|
# name='Android Components - detekt',
|
||||||
|
# description='Running detekt over all modules',
|
||||||
|
# command='detektCheck')
|
||||||
|
|
||||||
|
|
||||||
|
# def create_ktlint_task():
|
||||||
|
# return create_task(
|
||||||
|
# name='Android Components - ktlint',
|
||||||
|
# description='Running ktlint over all modules',
|
||||||
|
# command='ktlint')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
queue = taskcluster.Queue({ 'baseUrl': 'http://taskcluster/queue/v1' })
|
||||||
|
|
||||||
|
modules = fetch_module_names()
|
||||||
|
|
||||||
|
if len(modules) == 0:
|
||||||
|
print "Could not get module names from gradle"
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
for module in modules:
|
||||||
|
task = create_module_task(module)
|
||||||
|
task_id = taskcluster.slugId()
|
||||||
|
schedule_task(queue, task_id, task)
|
||||||
|
|
||||||
|
# schedule_task(queue, taskcluster.slugId(), create_detekt_task())
|
||||||
|
# schedule_task(queue, taskcluster.slugId(), create_ktlint_task())
|
28
automation/taskcluster/release/fetch-bintray-api-key.py
Normal file
28
automation/taskcluster/release/fetch-bintray-api-key.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import taskcluster
|
||||||
|
|
||||||
|
SECRET_NAME = 'project/mentat/publish'
|
||||||
|
TASKCLUSTER_BASE_URL = 'http://taskcluster/secrets/v1'
|
||||||
|
|
||||||
|
def fetch_publish_secrets(secret_name):
|
||||||
|
"""Fetch and return secrets from taskcluster's secret service"""
|
||||||
|
secrets = taskcluster.Secrets({'baseUrl': TASKCLUSTER_BASE_URL})
|
||||||
|
return secrets.get(secret_name)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Fetch the bintray user and api key from taskcluster's secret service
|
||||||
|
and save it to local.properties in the project root directory.
|
||||||
|
"""
|
||||||
|
data = fetch_publish_secrets(SECRET_NAME)
|
||||||
|
|
||||||
|
properties_file_path = os.path.join(os.path.dirname(__file__), '../../../sdks/android/Mentat/local.properties')
|
||||||
|
with open(properties_file_path, 'w') as properties_file:
|
||||||
|
properties_file.write("bintray.user=%s\n" % data['secret']['bintray_user'])
|
||||||
|
properties_file.write("bintray.apikey=%s\n" % data['secret']['bintray_apikey'])
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -8,24 +8,25 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
extern crate rustc_version;
|
use rustc_version::{version, Version};
|
||||||
|
|
||||||
use std::io::{self, Write};
|
use std::io::{self, Write};
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use rustc_version::{
|
|
||||||
Version,
|
|
||||||
version,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// MIN_VERSION should be changed when there's a new minimum version of rustc required
|
/// MIN_VERSION should be changed when there's a new minimum version of rustc required
|
||||||
/// to build the project.
|
/// to build the project.
|
||||||
static MIN_VERSION: &'static str = "1.25.0";
|
static MIN_VERSION: &str = "1.69.0";
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let ver = version().unwrap();
|
let ver = version().unwrap();
|
||||||
let min = Version::parse(MIN_VERSION).unwrap();
|
let min = Version::parse(MIN_VERSION).unwrap();
|
||||||
if ver < min {
|
if ver < min {
|
||||||
writeln!(&mut io::stderr(), "Mentat requires rustc {} or higher.", MIN_VERSION).unwrap();
|
writeln!(
|
||||||
|
&mut io::stderr(),
|
||||||
|
"Mentat requires rustc {} or higher, you were using version {}.",
|
||||||
|
MIN_VERSION,
|
||||||
|
ver
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
23
core-traits/Cargo.toml
Normal file
23
core-traits/Cargo.toml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
[package]
|
||||||
|
name = "core_traits"
|
||||||
|
version = "0.0.2"
|
||||||
|
workspace = ".."
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "core_traits"
|
||||||
|
path = "lib.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
chrono = { version = "~0.4", features = ["serde"] }
|
||||||
|
enum-set = "~0.0.8"
|
||||||
|
lazy_static = "~1.4"
|
||||||
|
indexmap = "~1.9"
|
||||||
|
ordered-float = { version = "~2.8", features = ["serde"] }
|
||||||
|
uuid = { version = "~1", features = ["v4", "serde"] }
|
||||||
|
serde = { version = "~1.0", features = ["rc"] }
|
||||||
|
serde_derive = "~1.0"
|
||||||
|
bytes = { version = "1.0.1", features = ["serde"] }
|
||||||
|
|
||||||
|
[dependencies.edn]
|
||||||
|
path = "../edn"
|
||||||
|
features = ["serde_support"]
|
1109
core-traits/lib.rs
Normal file
1109
core-traits/lib.rs
Normal file
File diff suppressed because it is too large
Load diff
|
@ -8,13 +8,9 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
use ::enum_set::{
|
use enum_set::EnumSet;
|
||||||
EnumSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
use ::types::{
|
use crate::ValueType;
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
|
|
||||||
trait EnumSetExtensions<T: ::enum_set::CLike + Clone> {
|
trait EnumSetExtensions<T: ::enum_set::CLike + Clone> {
|
||||||
/// Return a set containing both `x` and `y`.
|
/// Return a set containing both `x` and `y`.
|
||||||
|
@ -41,7 +37,6 @@ impl<T: ::enum_set::CLike + Clone> EnumSetExtensions<T> for EnumSet<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||||
pub struct ValueTypeSet(pub EnumSet<ValueType>);
|
pub struct ValueTypeSet(pub EnumSet<ValueType>);
|
||||||
|
|
||||||
|
@ -97,53 +92,53 @@ impl ValueTypeSet {
|
||||||
self.0.insert(vt)
|
self.0.insert(vt)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn len(&self) -> usize {
|
pub fn len(self) -> usize {
|
||||||
self.0.len()
|
self.0.len()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a set containing all the types in this set and `other`.
|
/// Returns a set containing all the types in this set and `other`.
|
||||||
pub fn union(&self, other: &ValueTypeSet) -> ValueTypeSet {
|
pub fn union(self, other: ValueTypeSet) -> ValueTypeSet {
|
||||||
ValueTypeSet(self.0.union(other.0))
|
ValueTypeSet(self.0.union(other.0))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn intersection(&self, other: &ValueTypeSet) -> ValueTypeSet {
|
pub fn intersection(self, other: ValueTypeSet) -> ValueTypeSet {
|
||||||
ValueTypeSet(self.0.intersection(other.0))
|
ValueTypeSet(self.0.intersection(other.0))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the set difference between `self` and `other`, which is the
|
/// Returns the set difference between `self` and `other`, which is the
|
||||||
/// set of items in `self` that are not in `other`.
|
/// set of items in `self` that are not in `other`.
|
||||||
pub fn difference(&self, other: &ValueTypeSet) -> ValueTypeSet {
|
pub fn difference(self, other: ValueTypeSet) -> ValueTypeSet {
|
||||||
ValueTypeSet(self.0 - other.0)
|
ValueTypeSet(self.0 - other.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return an arbitrary type that's part of this set.
|
/// Return an arbitrary type that's part of this set.
|
||||||
/// For a set containing a single type, this will be that type.
|
/// For a set containing a single type, this will be that type.
|
||||||
pub fn exemplar(&self) -> Option<ValueType> {
|
pub fn exemplar(self) -> Option<ValueType> {
|
||||||
self.0.iter().next()
|
self.0.iter().next()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_subset(&self, other: &ValueTypeSet) -> bool {
|
pub fn is_subset(self, other: ValueTypeSet) -> bool {
|
||||||
self.0.is_subset(&other.0)
|
self.0.is_subset(&other.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if `self` and `other` contain no items in common.
|
/// Returns true if `self` and `other` contain no items in common.
|
||||||
pub fn is_disjoint(&self, other: &ValueTypeSet) -> bool {
|
pub fn is_disjoint(self, other: ValueTypeSet) -> bool {
|
||||||
self.0.is_disjoint(&other.0)
|
self.0.is_disjoint(&other.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contains(&self, vt: ValueType) -> bool {
|
pub fn contains(self, vt: ValueType) -> bool {
|
||||||
self.0.contains(&vt)
|
self.0.contains(&vt)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_empty(&self) -> bool {
|
pub fn is_empty(self) -> bool {
|
||||||
self.0.is_empty()
|
self.0.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn is_unit(&self) -> bool {
|
pub fn is_unit(self) -> bool {
|
||||||
self.0.len() == 1
|
self.0.len() == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn iter(&self) -> ::enum_set::Iter<ValueType> {
|
pub fn iter(self) -> ::enum_set::Iter<ValueType> {
|
||||||
self.0.iter()
|
self.0.iter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,8 +150,8 @@ impl From<ValueType> for ValueTypeSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ValueTypeSet {
|
impl ValueTypeSet {
|
||||||
pub fn is_only_numeric(&self) -> bool {
|
pub fn is_only_numeric(self) -> bool {
|
||||||
self.is_subset(&ValueTypeSet::of_numeric_types())
|
self.is_subset(ValueTypeSet::of_numeric_types())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,21 +10,20 @@
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
use edn::symbols;
|
||||||
/// Literal `Value` instances in the the "db" namespace.
|
/// Literal `Value` instances in the the "db" namespace.
|
||||||
///
|
///
|
||||||
/// Used through-out the transactor to match core DB constructs.
|
/// Used through-out the transactor to match core DB constructs.
|
||||||
|
|
||||||
use edn::types::Value;
|
use edn::types::Value;
|
||||||
use edn::symbols;
|
|
||||||
|
|
||||||
/// Declare a lazy static `ident` of type `Value::Keyword` with the given `namespace` and
|
/// Declare a lazy static `ident` of type `Value::Keyword` with the given `namespace` and
|
||||||
/// `name`.
|
/// `name`.
|
||||||
///
|
///
|
||||||
/// It may look surprising that we declare a new `lazy_static!` block rather than including
|
/// It may look surprising to declare a new `lazy_static!` block rather than including
|
||||||
/// invocations inside an existing `lazy_static!` block. The latter cannot be done, since macros
|
/// invocations inside an existing `lazy_static!` block. The latter cannot be done, since macros
|
||||||
/// are expanded outside-in. Looking at the `lazy_static!` source suggests that there is no harm in
|
/// will be expanded outside-in. Looking at the `lazy_static!` source suggests that there is no
|
||||||
/// repeating that macro, since internally a multi-`static` block is expanded into many
|
/// harm in repeating that macro, since internally a multi-`static` block will be expanded into
|
||||||
/// single-`static` blocks.
|
/// many single-`static` blocks.
|
||||||
///
|
///
|
||||||
/// TODO: take just ":db.part/db" and define DB_PART_DB using "db.part" and "db".
|
/// TODO: take just ":db.part/db" and define DB_PART_DB using "db.part" and "db".
|
||||||
macro_rules! lazy_static_namespaced_keyword_value (
|
macro_rules! lazy_static_namespaced_keyword_value (
|
||||||
|
@ -59,6 +58,7 @@ lazy_static_namespaced_keyword_value!(DB_TYPE_REF, "db.type", "ref");
|
||||||
lazy_static_namespaced_keyword_value!(DB_TYPE_STRING, "db.type", "string");
|
lazy_static_namespaced_keyword_value!(DB_TYPE_STRING, "db.type", "string");
|
||||||
lazy_static_namespaced_keyword_value!(DB_TYPE_URI, "db.type", "uri");
|
lazy_static_namespaced_keyword_value!(DB_TYPE_URI, "db.type", "uri");
|
||||||
lazy_static_namespaced_keyword_value!(DB_TYPE_UUID, "db.type", "uuid");
|
lazy_static_namespaced_keyword_value!(DB_TYPE_UUID, "db.type", "uuid");
|
||||||
|
lazy_static_namespaced_keyword_value!(DB_TYPE_BYTES, "db.type", "bytes");
|
||||||
lazy_static_namespaced_keyword_value!(DB_UNIQUE, "db", "unique");
|
lazy_static_namespaced_keyword_value!(DB_UNIQUE, "db", "unique");
|
||||||
lazy_static_namespaced_keyword_value!(DB_UNIQUE_IDENTITY, "db.unique", "identity");
|
lazy_static_namespaced_keyword_value!(DB_UNIQUE_IDENTITY, "db.unique", "identity");
|
||||||
lazy_static_namespaced_keyword_value!(DB_UNIQUE_VALUE, "db.unique", "value");
|
lazy_static_namespaced_keyword_value!(DB_UNIQUE_VALUE, "db.unique", "value");
|
|
@ -1,19 +1,18 @@
|
||||||
[package]
|
[package]
|
||||||
name = "mentat_core"
|
name = "mentat_core"
|
||||||
version = "0.0.1"
|
version = "0.0.2"
|
||||||
workspace = ".."
|
workspace = ".."
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = { version = "0.4", features = ["serde"] }
|
chrono = { version = "~0.4", features = ["serde"] }
|
||||||
enum-set = { git = "https://github.com/rnewman/enum-set" }
|
enum-set = "~0.0"
|
||||||
failure = "0.1.1"
|
failure = "~0.1"
|
||||||
indexmap = "1"
|
indexmap = "~1.9"
|
||||||
lazy_static = "0.2"
|
ordered-float = { version = "~2.8", features = ["serde"] }
|
||||||
num = "0.1"
|
uuid = { version = "~1", features = ["v4", "serde"] }
|
||||||
ordered-float = { version = "0.5", features = ["serde"] }
|
|
||||||
uuid = { version = "0.5", features = ["v4", "serde"] }
|
[dependencies.core_traits]
|
||||||
serde = { version = "1.0", features = ["rc"] }
|
path = "../core-traits"
|
||||||
serde_derive = "1.0"
|
|
||||||
|
|
||||||
[dependencies.edn]
|
[dependencies.edn]
|
||||||
path = "../edn"
|
path = "../edn"
|
||||||
|
|
|
@ -9,33 +9,41 @@
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
/// Cache traits.
|
/// Cache traits.
|
||||||
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use failure;
|
use core_traits::{Entid, TypedValue};
|
||||||
|
|
||||||
use std::collections::{
|
use crate::Schema;
|
||||||
BTreeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
use ::{
|
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
TypedValue,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub trait CachedAttributes {
|
pub trait CachedAttributes {
|
||||||
fn is_attribute_cached_reverse(&self, entid: Entid) -> bool;
|
fn is_attribute_cached_reverse(&self, entid: Entid) -> bool;
|
||||||
fn is_attribute_cached_forward(&self, entid: Entid) -> bool;
|
fn is_attribute_cached_forward(&self, entid: Entid) -> bool;
|
||||||
fn has_cached_attributes(&self) -> bool;
|
fn has_cached_attributes(&self) -> bool;
|
||||||
|
|
||||||
fn get_values_for_entid(&self, schema: &Schema, attribute: Entid, entid: Entid) -> Option<&Vec<TypedValue>>;
|
fn get_values_for_entid(
|
||||||
fn get_value_for_entid(&self, schema: &Schema, attribute: Entid, entid: Entid) -> Option<&TypedValue>;
|
&self,
|
||||||
|
schema: &Schema,
|
||||||
|
attribute: Entid,
|
||||||
|
entid: Entid,
|
||||||
|
) -> Option<&Vec<TypedValue>>;
|
||||||
|
fn get_value_for_entid(
|
||||||
|
&self,
|
||||||
|
schema: &Schema,
|
||||||
|
attribute: Entid,
|
||||||
|
entid: Entid,
|
||||||
|
) -> Option<&TypedValue>;
|
||||||
|
|
||||||
/// Reverse lookup.
|
/// Reverse lookup.
|
||||||
fn get_entid_for_value(&self, attribute: Entid, value: &TypedValue) -> Option<Entid>;
|
fn get_entid_for_value(&self, attribute: Entid, value: &TypedValue) -> Option<Entid>;
|
||||||
fn get_entids_for_value(&self, attribute: Entid, value: &TypedValue) -> Option<&BTreeSet<Entid>>;
|
fn get_entids_for_value(
|
||||||
|
&self,
|
||||||
|
attribute: Entid,
|
||||||
|
value: &TypedValue,
|
||||||
|
) -> Option<&BTreeSet<Entid>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait UpdateableCache<Error=failure::Error> {
|
pub trait UpdateableCache<E> {
|
||||||
fn update<I>(&mut self, schema: &Schema, retractions: I, assertions: I) -> Result<(), Error>
|
fn update<I>(&mut self, schema: &Schema, retractions: I, assertions: I) -> Result<(), E>
|
||||||
where I: Iterator<Item=(Entid, Entid, TypedValue)>;
|
where
|
||||||
|
I: Iterator<Item = (Entid, Entid, TypedValue)>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Default)]
|
||||||
pub struct RcCounter {
|
pub struct RcCounter {
|
||||||
c: Rc<Cell<usize>>,
|
c: Rc<Cell<usize>>,
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,15 @@ pub struct RcCounter {
|
||||||
/// A simple shared counter.
|
/// A simple shared counter.
|
||||||
impl RcCounter {
|
impl RcCounter {
|
||||||
pub fn with_initial(value: usize) -> Self {
|
pub fn with_initial(value: usize) -> Self {
|
||||||
RcCounter { c: Rc::new(Cell::new(value)) }
|
RcCounter {
|
||||||
|
c: Rc::new(Cell::new(value)),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
RcCounter { c: Rc::new(Cell::new(0)) }
|
RcCounter {
|
||||||
|
c: Rc::new(Cell::new(0)),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the next value in the sequence.
|
/// Return the next value in the sequence.
|
||||||
|
|
347
core/src/lib.rs
347
core/src/lib.rs
|
@ -14,228 +14,39 @@ extern crate failure;
|
||||||
extern crate indexmap;
|
extern crate indexmap;
|
||||||
extern crate ordered_float;
|
extern crate ordered_float;
|
||||||
extern crate uuid;
|
extern crate uuid;
|
||||||
extern crate serde;
|
|
||||||
|
|
||||||
#[macro_use]
|
extern crate core_traits;
|
||||||
extern crate lazy_static;
|
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate serde_derive;
|
|
||||||
|
|
||||||
extern crate edn;
|
extern crate edn;
|
||||||
|
|
||||||
pub mod values;
|
use core_traits::{Attribute, Entid, KnownEntid, ValueType};
|
||||||
|
|
||||||
mod cache;
|
mod cache;
|
||||||
|
|
||||||
use std::collections::{
|
use std::collections::BTreeMap;
|
||||||
BTreeMap,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use uuid::Uuid;
|
pub use uuid::Uuid;
|
||||||
|
|
||||||
pub use chrono::{
|
pub use chrono::{
|
||||||
DateTime,
|
DateTime,
|
||||||
Timelike, // For truncation.
|
Timelike, // For truncation.
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use edn::{
|
pub use edn::parse::parse_query;
|
||||||
Cloned,
|
pub use edn::{Cloned, FromMicros, FromRc, Keyword, ToMicros, Utc, ValueRc};
|
||||||
FromMicros,
|
|
||||||
FromRc,
|
|
||||||
Keyword,
|
|
||||||
ToMicros,
|
|
||||||
Utc,
|
|
||||||
ValueRc,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use edn::parse::{
|
pub use crate::cache::{CachedAttributes, UpdateableCache};
|
||||||
parse_query,
|
|
||||||
ParseError as EdnParseError,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use cache::{
|
|
||||||
CachedAttributes,
|
|
||||||
UpdateableCache,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
mod sql_types;
|
||||||
|
mod tx_report;
|
||||||
/// Core types defining a Mentat knowledge base.
|
/// Core types defining a Mentat knowledge base.
|
||||||
mod types;
|
mod types;
|
||||||
mod value_type_set;
|
|
||||||
mod sql_types;
|
|
||||||
|
|
||||||
pub use types::{
|
pub use crate::tx_report::TxReport;
|
||||||
Binding,
|
|
||||||
Entid,
|
|
||||||
KnownEntid,
|
|
||||||
StructuredMap,
|
|
||||||
TypedValue,
|
|
||||||
ValueType,
|
|
||||||
ValueTypeTag,
|
|
||||||
now,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use value_type_set::{
|
pub use crate::types::ValueTypeTag;
|
||||||
ValueTypeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use sql_types::{
|
pub use crate::sql_types::{SQLTypeAffinity, SQLValueType, SQLValueTypeSet};
|
||||||
SQLTypeAffinity,
|
|
||||||
SQLValueType,
|
|
||||||
SQLValueTypeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Bit flags used in `flags0` column in temporary tables created during search,
|
|
||||||
/// such as the `search_results`, `inexact_searches` and `exact_searches` tables.
|
|
||||||
/// When moving to a more concrete table, such as `datoms`, they are expanded out
|
|
||||||
/// via these flags and put into their own column rather than a bit field.
|
|
||||||
pub enum AttributeBitFlags {
|
|
||||||
IndexAVET = 1 << 0,
|
|
||||||
IndexVAET = 1 << 1,
|
|
||||||
IndexFulltext = 1 << 2,
|
|
||||||
UniqueValue = 1 << 3,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub mod attribute {
|
|
||||||
use TypedValue;
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
|
||||||
pub enum Unique {
|
|
||||||
Value,
|
|
||||||
Identity,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Unique {
|
|
||||||
// This is easier than rejigging DB_UNIQUE_VALUE to not be EDN.
|
|
||||||
pub fn into_typed_value(self) -> TypedValue {
|
|
||||||
match self {
|
|
||||||
Unique::Value => TypedValue::typed_ns_keyword("db.unique", "value"),
|
|
||||||
Unique::Identity => TypedValue::typed_ns_keyword("db.unique", "identity"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A Mentat schema attribute has a value type and several other flags determining how assertions
|
|
||||||
/// with the attribute are interpreted.
|
|
||||||
///
|
|
||||||
/// TODO: consider packing this into a bitfield or similar.
|
|
||||||
#[derive(Clone,Debug,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
|
||||||
pub struct Attribute {
|
|
||||||
/// The associated value type, i.e., `:db/valueType`?
|
|
||||||
pub value_type: ValueType,
|
|
||||||
|
|
||||||
/// `true` if this attribute is multi-valued, i.e., it is `:db/cardinality
|
|
||||||
/// :db.cardinality/many`. `false` if this attribute is single-valued (the default), i.e., it
|
|
||||||
/// is `:db/cardinality :db.cardinality/one`.
|
|
||||||
pub multival: bool,
|
|
||||||
|
|
||||||
/// `None` if this attribute is neither unique-value nor unique-identity.
|
|
||||||
///
|
|
||||||
/// `Some(attribute::Unique::Value)` if this attribute is unique-value, i.e., it is `:db/unique
|
|
||||||
/// :db.unique/value`.
|
|
||||||
///
|
|
||||||
/// *Unique-value* means that there is at most one assertion with the attribute and a
|
|
||||||
/// particular value in the datom store. Unique-value attributes can be used in lookup-refs.
|
|
||||||
///
|
|
||||||
/// `Some(attribute::Unique::Identity)` if this attribute is unique-identity, i.e., it is `:db/unique
|
|
||||||
/// :db.unique/identity`.
|
|
||||||
///
|
|
||||||
/// Unique-identity attributes always have value type `Ref`.
|
|
||||||
///
|
|
||||||
/// *Unique-identity* means that the attribute is *unique-value* and that they can be used in
|
|
||||||
/// lookup-refs and will automatically upsert where appropriate.
|
|
||||||
pub unique: Option<attribute::Unique>,
|
|
||||||
|
|
||||||
/// `true` if this attribute is automatically indexed, i.e., it is `:db/indexing true`.
|
|
||||||
pub index: bool,
|
|
||||||
|
|
||||||
/// `true` if this attribute is automatically fulltext indexed, i.e., it is `:db/fulltext true`.
|
|
||||||
///
|
|
||||||
/// Fulltext attributes always have string values.
|
|
||||||
pub fulltext: bool,
|
|
||||||
|
|
||||||
/// `true` if this attribute is a component, i.e., it is `:db/isComponent true`.
|
|
||||||
///
|
|
||||||
/// Component attributes always have value type `Ref`.
|
|
||||||
///
|
|
||||||
/// They are used to compose entities from component sub-entities: they are fetched recursively
|
|
||||||
/// by pull expressions, and they are automatically recursively deleted where appropriate.
|
|
||||||
pub component: bool,
|
|
||||||
|
|
||||||
/// `true` if this attribute doesn't require history to be kept, i.e., it is `:db/noHistory true`.
|
|
||||||
pub no_history: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Attribute {
|
|
||||||
/// Combine several attribute flags into a bitfield used in temporary search tables.
|
|
||||||
pub fn flags(&self) -> u8 {
|
|
||||||
let mut flags: u8 = 0;
|
|
||||||
|
|
||||||
if self.index {
|
|
||||||
flags |= AttributeBitFlags::IndexAVET as u8;
|
|
||||||
}
|
|
||||||
if self.value_type == ValueType::Ref {
|
|
||||||
flags |= AttributeBitFlags::IndexVAET as u8;
|
|
||||||
}
|
|
||||||
if self.fulltext {
|
|
||||||
flags |= AttributeBitFlags::IndexFulltext as u8;
|
|
||||||
}
|
|
||||||
if self.unique.is_some() {
|
|
||||||
flags |= AttributeBitFlags::UniqueValue as u8;
|
|
||||||
}
|
|
||||||
flags
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn to_edn_value(&self, ident: Option<Keyword>) -> edn::Value {
|
|
||||||
let mut attribute_map: BTreeMap<edn::Value, edn::Value> = BTreeMap::default();
|
|
||||||
if let Some(ident) = ident {
|
|
||||||
attribute_map.insert(values::DB_IDENT.clone(), edn::Value::Keyword(ident));
|
|
||||||
}
|
|
||||||
|
|
||||||
attribute_map.insert(values::DB_VALUE_TYPE.clone(), self.value_type.into_edn_value());
|
|
||||||
|
|
||||||
attribute_map.insert(values::DB_CARDINALITY.clone(), if self.multival { values::DB_CARDINALITY_MANY.clone() } else { values::DB_CARDINALITY_ONE.clone() });
|
|
||||||
|
|
||||||
match self.unique {
|
|
||||||
Some(attribute::Unique::Value) => { attribute_map.insert(values::DB_UNIQUE.clone(), values::DB_UNIQUE_VALUE.clone()); },
|
|
||||||
Some(attribute::Unique::Identity) => { attribute_map.insert(values::DB_UNIQUE.clone(), values::DB_UNIQUE_IDENTITY.clone()); },
|
|
||||||
None => (),
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.index {
|
|
||||||
attribute_map.insert(values::DB_INDEX.clone(), edn::Value::Boolean(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.fulltext {
|
|
||||||
attribute_map.insert(values::DB_FULLTEXT.clone(), edn::Value::Boolean(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.component {
|
|
||||||
attribute_map.insert(values::DB_IS_COMPONENT.clone(), edn::Value::Boolean(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
if self.no_history {
|
|
||||||
attribute_map.insert(values::DB_NO_HISTORY.clone(), edn::Value::Boolean(true));
|
|
||||||
}
|
|
||||||
|
|
||||||
edn::Value::Map(attribute_map)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for Attribute {
|
|
||||||
fn default() -> Attribute {
|
|
||||||
Attribute {
|
|
||||||
// There's no particular reason to favour one value type, so Ref it is.
|
|
||||||
value_type: ValueType::Ref,
|
|
||||||
fulltext: false,
|
|
||||||
index: false,
|
|
||||||
multival: false,
|
|
||||||
unique: None,
|
|
||||||
component: false,
|
|
||||||
no_history: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Map `Keyword` idents (`:db/ident`) to positive integer entids (`1`).
|
/// Map `Keyword` idents (`:db/ident`) to positive integer entids (`1`).
|
||||||
pub type IdentMap = BTreeMap<Keyword, Entid>;
|
pub type IdentMap = BTreeMap<Keyword, Entid>;
|
||||||
|
@ -279,15 +90,21 @@ pub struct Schema {
|
||||||
pub trait HasSchema {
|
pub trait HasSchema {
|
||||||
fn entid_for_type(&self, t: ValueType) -> Option<KnownEntid>;
|
fn entid_for_type(&self, t: ValueType) -> Option<KnownEntid>;
|
||||||
|
|
||||||
fn get_ident<T>(&self, x: T) -> Option<&Keyword> where T: Into<Entid>;
|
fn get_ident<T>(&self, x: T) -> Option<&Keyword>
|
||||||
|
where
|
||||||
|
T: Into<Entid>;
|
||||||
fn get_entid(&self, x: &Keyword) -> Option<KnownEntid>;
|
fn get_entid(&self, x: &Keyword) -> Option<KnownEntid>;
|
||||||
fn attribute_for_entid<T>(&self, x: T) -> Option<&Attribute> where T: Into<Entid>;
|
fn attribute_for_entid<T>(&self, x: T) -> Option<&Attribute>
|
||||||
|
where
|
||||||
|
T: Into<Entid>;
|
||||||
|
|
||||||
// Returns the attribute and the entid named by the provided ident.
|
// Returns the attribute and the entid named by the provided ident.
|
||||||
fn attribute_for_ident(&self, ident: &Keyword) -> Option<(&Attribute, KnownEntid)>;
|
fn attribute_for_ident(&self, ident: &Keyword) -> Option<(&Attribute, KnownEntid)>;
|
||||||
|
|
||||||
/// Return true if the provided entid identifies an attribute in this schema.
|
/// Return true if the provided entid identifies an attribute in this schema.
|
||||||
fn is_attribute<T>(&self, x: T) -> bool where T: Into<Entid>;
|
fn is_attribute<T>(&self, x: T) -> bool
|
||||||
|
where
|
||||||
|
T: Into<Entid>;
|
||||||
|
|
||||||
/// Return true if the provided ident identifies an attribute in this schema.
|
/// Return true if the provided ident identifies an attribute in this schema.
|
||||||
fn identifies_attribute(&self, x: &Keyword) -> bool;
|
fn identifies_attribute(&self, x: &Keyword) -> bool;
|
||||||
|
@ -297,29 +114,37 @@ pub trait HasSchema {
|
||||||
|
|
||||||
impl Schema {
|
impl Schema {
|
||||||
pub fn new(ident_map: IdentMap, entid_map: EntidMap, attribute_map: AttributeMap) -> Schema {
|
pub fn new(ident_map: IdentMap, entid_map: EntidMap, attribute_map: AttributeMap) -> Schema {
|
||||||
let mut s = Schema { ident_map, entid_map, attribute_map, component_attributes: Vec::new() };
|
let mut s = Schema {
|
||||||
|
ident_map,
|
||||||
|
entid_map,
|
||||||
|
attribute_map,
|
||||||
|
component_attributes: Vec::new(),
|
||||||
|
};
|
||||||
s.update_component_attributes();
|
s.update_component_attributes();
|
||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns an symbolic representation of the schema suitable for applying across Mentat stores.
|
/// Returns an symbolic representation of the schema suitable for applying across Mentat stores.
|
||||||
pub fn to_edn_value(&self) -> edn::Value {
|
pub fn to_edn_value(&self) -> edn::Value {
|
||||||
edn::Value::Vector((&self.attribute_map).iter()
|
edn::Value::Vector(
|
||||||
.map(|(entid, attribute)|
|
(&self.attribute_map)
|
||||||
attribute.to_edn_value(self.get_ident(*entid).cloned()))
|
.iter()
|
||||||
.collect())
|
.map(|(entid, attribute)| attribute.to_edn_value(self.get_ident(*entid).cloned()))
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_raw_entid(&self, x: &Keyword) -> Option<Entid> {
|
fn get_raw_entid(&self, x: &Keyword) -> Option<Entid> {
|
||||||
self.ident_map.get(x).map(|x| *x)
|
self.ident_map.get(x).copied()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_component_attributes(&mut self) {
|
pub fn update_component_attributes(&mut self) {
|
||||||
let mut components: Vec<Entid>;
|
let mut components: Vec<Entid>;
|
||||||
components = self.attribute_map
|
components = self
|
||||||
.iter()
|
.attribute_map
|
||||||
.filter_map(|(k, v)| if v.component { Some(*k) } else { None })
|
.iter()
|
||||||
.collect();
|
.filter_map(|(k, v)| if v.component { Some(*k) } else { None })
|
||||||
|
.collect();
|
||||||
components.sort_unstable();
|
components.sort_unstable();
|
||||||
self.component_attributes = components;
|
self.component_attributes = components;
|
||||||
}
|
}
|
||||||
|
@ -331,7 +156,10 @@ impl HasSchema for Schema {
|
||||||
self.get_entid(&t.into_keyword())
|
self.get_entid(&t.into_keyword())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_ident<T>(&self, x: T) -> Option<&Keyword> where T: Into<Entid> {
|
fn get_ident<T>(&self, x: T) -> Option<&Keyword>
|
||||||
|
where
|
||||||
|
T: Into<Entid>,
|
||||||
|
{
|
||||||
self.entid_map.get(&x.into())
|
self.entid_map.get(&x.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,25 +167,33 @@ impl HasSchema for Schema {
|
||||||
self.get_raw_entid(x).map(KnownEntid)
|
self.get_raw_entid(x).map(KnownEntid)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn attribute_for_entid<T>(&self, x: T) -> Option<&Attribute> where T: Into<Entid> {
|
fn attribute_for_entid<T>(&self, x: T) -> Option<&Attribute>
|
||||||
|
where
|
||||||
|
T: Into<Entid>,
|
||||||
|
{
|
||||||
self.attribute_map.get(&x.into())
|
self.attribute_map.get(&x.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn attribute_for_ident(&self, ident: &Keyword) -> Option<(&Attribute, KnownEntid)> {
|
fn attribute_for_ident(&self, ident: &Keyword) -> Option<(&Attribute, KnownEntid)> {
|
||||||
self.get_raw_entid(&ident)
|
self.get_raw_entid(&ident).and_then(|entid| {
|
||||||
.and_then(|entid| {
|
self.attribute_for_entid(entid)
|
||||||
self.attribute_for_entid(entid).map(|a| (a, KnownEntid(entid)))
|
.map(|a| (a, KnownEntid(entid)))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return true if the provided entid identifies an attribute in this schema.
|
/// Return true if the provided entid identifies an attribute in this schema.
|
||||||
fn is_attribute<T>(&self, x: T) -> bool where T: Into<Entid> {
|
fn is_attribute<T>(&self, x: T) -> bool
|
||||||
|
where
|
||||||
|
T: Into<Entid>,
|
||||||
|
{
|
||||||
self.attribute_map.contains_key(&x.into())
|
self.attribute_map.contains_key(&x.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return true if the provided ident identifies an attribute in this schema.
|
/// Return true if the provided ident identifies an attribute in this schema.
|
||||||
fn identifies_attribute(&self, x: &Keyword) -> bool {
|
fn identifies_attribute(&self, x: &Keyword) -> bool {
|
||||||
self.get_raw_entid(x).map(|e| self.is_attribute(e)).unwrap_or(false)
|
self.get_raw_entid(x)
|
||||||
|
.map(|e| self.is_attribute(e))
|
||||||
|
.unwrap_or(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn component_attributes(&self) -> &[Entid] {
|
fn component_attributes(&self) -> &[Entid] {
|
||||||
|
@ -365,7 +201,6 @@ impl HasSchema for Schema {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod intern_set;
|
|
||||||
pub mod counter;
|
pub mod counter;
|
||||||
pub mod util;
|
pub mod util;
|
||||||
|
|
||||||
|
@ -389,7 +224,7 @@ pub mod util;
|
||||||
macro_rules! interpose {
|
macro_rules! interpose {
|
||||||
( $name: pat, $across: expr, $body: block, $inter: block ) => {
|
( $name: pat, $across: expr, $body: block, $inter: block ) => {
|
||||||
interpose_iter!($name, $across.iter(), $body, $inter)
|
interpose_iter!($name, $across.iter(), $body, $inter)
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A helper to bind `name` to values in `across`, running `body` for each value,
|
/// A helper to bind `name` to values in `across`, running `body` for each value,
|
||||||
|
@ -405,7 +240,7 @@ macro_rules! interpose_iter {
|
||||||
$body;
|
$body;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -414,6 +249,8 @@ mod test {
|
||||||
|
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
use core_traits::{attribute, TypedValue};
|
||||||
|
|
||||||
fn associate_ident(schema: &mut Schema, i: Keyword, e: Entid) {
|
fn associate_ident(schema: &mut Schema, i: Keyword, e: Entid) {
|
||||||
schema.entid_map.insert(e, i.clone());
|
schema.entid_map.insert(e, i.clone());
|
||||||
schema.ident_map.insert(i, e);
|
schema.ident_map.insert(i, e);
|
||||||
|
@ -423,58 +260,12 @@ mod test {
|
||||||
schema.attribute_map.insert(e, a);
|
schema.attribute_map.insert(e, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_attribute_flags() {
|
|
||||||
let attr1 = Attribute {
|
|
||||||
index: true,
|
|
||||||
value_type: ValueType::Ref,
|
|
||||||
fulltext: false,
|
|
||||||
unique: None,
|
|
||||||
multival: false,
|
|
||||||
component: false,
|
|
||||||
no_history: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(attr1.flags() & AttributeBitFlags::IndexAVET as u8 != 0);
|
|
||||||
assert!(attr1.flags() & AttributeBitFlags::IndexVAET as u8 != 0);
|
|
||||||
assert!(attr1.flags() & AttributeBitFlags::IndexFulltext as u8 == 0);
|
|
||||||
assert!(attr1.flags() & AttributeBitFlags::UniqueValue as u8 == 0);
|
|
||||||
|
|
||||||
let attr2 = Attribute {
|
|
||||||
index: false,
|
|
||||||
value_type: ValueType::Boolean,
|
|
||||||
fulltext: true,
|
|
||||||
unique: Some(attribute::Unique::Value),
|
|
||||||
multival: false,
|
|
||||||
component: false,
|
|
||||||
no_history: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(attr2.flags() & AttributeBitFlags::IndexAVET as u8 == 0);
|
|
||||||
assert!(attr2.flags() & AttributeBitFlags::IndexVAET as u8 == 0);
|
|
||||||
assert!(attr2.flags() & AttributeBitFlags::IndexFulltext as u8 != 0);
|
|
||||||
assert!(attr2.flags() & AttributeBitFlags::UniqueValue as u8 != 0);
|
|
||||||
|
|
||||||
let attr3 = Attribute {
|
|
||||||
index: false,
|
|
||||||
value_type: ValueType::Boolean,
|
|
||||||
fulltext: true,
|
|
||||||
unique: Some(attribute::Unique::Identity),
|
|
||||||
multival: false,
|
|
||||||
component: false,
|
|
||||||
no_history: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
assert!(attr3.flags() & AttributeBitFlags::IndexAVET as u8 == 0);
|
|
||||||
assert!(attr3.flags() & AttributeBitFlags::IndexVAET as u8 == 0);
|
|
||||||
assert!(attr3.flags() & AttributeBitFlags::IndexFulltext as u8 != 0);
|
|
||||||
assert!(attr3.flags() & AttributeBitFlags::UniqueValue as u8 != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_datetime_truncation() {
|
fn test_datetime_truncation() {
|
||||||
let dt: DateTime<Utc> = DateTime::from_str("2018-01-11T00:34:09.273457004Z").expect("parsed");
|
let dt: DateTime<Utc> =
|
||||||
let expected: DateTime<Utc> = DateTime::from_str("2018-01-11T00:34:09.273457Z").expect("parsed");
|
DateTime::from_str("2018-01-11T00:34:09.273457004Z").expect("parsed");
|
||||||
|
let expected: DateTime<Utc> =
|
||||||
|
DateTime::from_str("2018-01-11T00:34:09.273457Z").expect("parsed");
|
||||||
|
|
||||||
let tv: TypedValue = dt.into();
|
let tv: TypedValue = dt.into();
|
||||||
if let TypedValue::Instant(roundtripped) = tv {
|
if let TypedValue::Instant(roundtripped) = tv {
|
||||||
|
@ -542,7 +333,9 @@ mod test {
|
||||||
:db/cardinality :db.cardinality/one
|
:db/cardinality :db.cardinality/one
|
||||||
:db/unique :db.unique/identity
|
:db/unique :db.unique/identity
|
||||||
:db/isComponent true }, ]"#;
|
:db/isComponent true }, ]"#;
|
||||||
let expected_value = edn::parse::value(&expected_output).expect("to be able to parse").without_spans();
|
let expected_value = edn::parse::value(&expected_output)
|
||||||
|
.expect("to be able to parse")
|
||||||
|
.without_spans();
|
||||||
assert_eq!(expected_value, value);
|
assert_eq!(expected_value, value);
|
||||||
|
|
||||||
// let's compare the whole thing again, just to make sure we are not changing anything when we convert to edn.
|
// let's compare the whole thing again, just to make sure we are not changing anything when we convert to edn.
|
||||||
|
|
|
@ -8,18 +8,11 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
use std::collections::{
|
use std::collections::BTreeSet;
|
||||||
BTreeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
use types::{
|
use core_traits::{ValueType, ValueTypeSet};
|
||||||
ValueType,
|
|
||||||
ValueTypeTag,
|
|
||||||
};
|
|
||||||
|
|
||||||
use value_type_set::{
|
use crate::types::ValueTypeTag;
|
||||||
ValueTypeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Type safe representation of the possible return values from SQLite's `typeof`
|
/// Type safe representation of the possible return values from SQLite's `typeof`
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
|
@ -48,16 +41,17 @@ pub trait SQLValueType {
|
||||||
impl SQLValueType for ValueType {
|
impl SQLValueType for ValueType {
|
||||||
fn sql_representation(&self) -> (ValueTypeTag, Option<SQLTypeAffinity>) {
|
fn sql_representation(&self) -> (ValueTypeTag, Option<SQLTypeAffinity>) {
|
||||||
match *self {
|
match *self {
|
||||||
ValueType::Ref => (0, None),
|
ValueType::Ref => (0, None),
|
||||||
ValueType::Boolean => (1, None),
|
ValueType::Boolean => (1, None),
|
||||||
ValueType::Instant => (4, None),
|
ValueType::Instant => (4, None),
|
||||||
|
|
||||||
// SQLite distinguishes integral from decimal types, allowing long and double to share a tag.
|
// SQLite distinguishes integral from decimal types, allowing long and double to share a tag.
|
||||||
ValueType::Long => (5, Some(SQLTypeAffinity::Integer)),
|
ValueType::Long => (5, Some(SQLTypeAffinity::Integer)),
|
||||||
ValueType::Double => (5, Some(SQLTypeAffinity::Real)),
|
ValueType::Double => (5, Some(SQLTypeAffinity::Real)),
|
||||||
ValueType::String => (10, None),
|
ValueType::String => (10, None),
|
||||||
ValueType::Uuid => (11, None),
|
ValueType::Uuid => (11, None),
|
||||||
ValueType::Keyword => (13, None),
|
ValueType::Keyword => (13, None),
|
||||||
|
ValueType::Bytes => (15, Some(SQLTypeAffinity::Blob)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,26 +62,17 @@ impl SQLValueType for ValueType {
|
||||||
|
|
||||||
/// Returns true if the provided integer is in the SQLite value space of this type. For
|
/// Returns true if the provided integer is in the SQLite value space of this type. For
|
||||||
/// example, `1` is how we encode `true`.
|
/// example, `1` is how we encode `true`.
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use mentat_core::{ValueType, SQLValueType};
|
|
||||||
/// assert!(!ValueType::Instant.accommodates_integer(1493399581314));
|
|
||||||
/// assert!(!ValueType::Instant.accommodates_integer(1493399581314000));
|
|
||||||
/// assert!(ValueType::Boolean.accommodates_integer(1));
|
|
||||||
/// assert!(!ValueType::Boolean.accommodates_integer(-1));
|
|
||||||
/// assert!(!ValueType::Boolean.accommodates_integer(10));
|
|
||||||
/// assert!(!ValueType::String.accommodates_integer(10));
|
|
||||||
/// ```
|
|
||||||
fn accommodates_integer(&self, int: i64) -> bool {
|
fn accommodates_integer(&self, int: i64) -> bool {
|
||||||
use ValueType::*;
|
use crate::ValueType::*;
|
||||||
match *self {
|
match *self {
|
||||||
Instant => false, // Always use #inst.
|
Instant => false, // Always use #inst.
|
||||||
Long | Double => true,
|
Long | Double => true,
|
||||||
Ref => int >= 0,
|
Ref => int >= 0,
|
||||||
Boolean => (int == 0) || (int == 1),
|
Boolean => (int == 0) || (int == 1),
|
||||||
ValueType::String => false,
|
ValueType::String => false,
|
||||||
Keyword => false,
|
Keyword => false,
|
||||||
Uuid => false,
|
Uuid => false,
|
||||||
|
Bytes => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,3 +122,19 @@ impl SQLValueTypeSet for ValueTypeSet {
|
||||||
!acc.is_empty()
|
!acc.is_empty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::sql_types::SQLValueType;
|
||||||
|
use core_traits::ValueType;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_accommodates_integer() {
|
||||||
|
assert!(!ValueType::Instant.accommodates_integer(1493399581314));
|
||||||
|
assert!(!ValueType::Instant.accommodates_integer(1493399581314000));
|
||||||
|
assert!(ValueType::Boolean.accommodates_integer(1));
|
||||||
|
assert!(!ValueType::Boolean.accommodates_integer(-1));
|
||||||
|
assert!(!ValueType::Boolean.accommodates_integer(10));
|
||||||
|
assert!(!ValueType::String.accommodates_integer(10));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
34
core/src/tx_report.rs
Normal file
34
core/src/tx_report.rs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
// Copyright 2018 Mozilla
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||||
|
// this file except in compliance with the License. You may obtain a copy of the
|
||||||
|
// License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
use core_traits::Entid;
|
||||||
|
|
||||||
|
use crate::{DateTime, Utc};
|
||||||
|
|
||||||
|
/// A transaction report summarizes an applied transaction.
|
||||||
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
|
pub struct TxReport {
|
||||||
|
/// The transaction ID of the transaction.
|
||||||
|
pub tx_id: Entid,
|
||||||
|
|
||||||
|
/// The timestamp when the transaction began to be committed.
|
||||||
|
pub tx_instant: DateTime<Utc>,
|
||||||
|
|
||||||
|
/// A map from string literal tempid to resolved or allocated entid.
|
||||||
|
///
|
||||||
|
/// Every string literal tempid presented to the transactor either resolves via upsert to an
|
||||||
|
/// existing entid, or is allocated a new entid. (It is possible for multiple distinct string
|
||||||
|
/// literal tempids to all unify to a single freshly allocated entid.)
|
||||||
|
pub tempids: BTreeMap<String, Entid>,
|
||||||
|
}
|
|
@ -8,712 +8,4 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
use ::std::ffi::{
|
|
||||||
CString,
|
|
||||||
};
|
|
||||||
use ::std::os::raw::c_char;
|
|
||||||
|
|
||||||
use ::std::rc::{
|
|
||||||
Rc,
|
|
||||||
};
|
|
||||||
|
|
||||||
use ::std::sync::{
|
|
||||||
Arc,
|
|
||||||
};
|
|
||||||
|
|
||||||
use std::fmt;
|
|
||||||
use ::enum_set::EnumSet;
|
|
||||||
|
|
||||||
use ::ordered_float::OrderedFloat;
|
|
||||||
|
|
||||||
use ::uuid::Uuid;
|
|
||||||
|
|
||||||
use ::chrono::{
|
|
||||||
DateTime,
|
|
||||||
Timelike, // For truncation.
|
|
||||||
};
|
|
||||||
|
|
||||||
use ::indexmap::{
|
|
||||||
IndexMap,
|
|
||||||
};
|
|
||||||
|
|
||||||
use ::edn::{
|
|
||||||
self,
|
|
||||||
Cloned,
|
|
||||||
FromMicros,
|
|
||||||
FromRc,
|
|
||||||
Keyword,
|
|
||||||
Utc,
|
|
||||||
ValueRc,
|
|
||||||
};
|
|
||||||
|
|
||||||
use values;
|
|
||||||
|
|
||||||
/// Represents one entid in the entid space.
|
|
||||||
///
|
|
||||||
/// Per https://www.sqlite.org/datatype3.html (see also http://stackoverflow.com/a/8499544), SQLite
|
|
||||||
/// stores signed integers up to 64 bits in size. Since u32 is not appropriate for our use case, we
|
|
||||||
/// use i64 rather than manually truncating u64 to u63 and casting to i64 throughout the codebase.
|
|
||||||
pub type Entid = i64;
|
|
||||||
|
|
||||||
/// An entid that's either already in the store, or newly allocated to a tempid.
|
|
||||||
/// TODO: we'd like to link this in some way to the lifetime of a particular PartitionMap.
|
|
||||||
#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq, Ord, PartialOrd)]
|
|
||||||
pub struct KnownEntid(pub Entid);
|
|
||||||
|
|
||||||
impl From<KnownEntid> for Entid {
|
|
||||||
fn from(k: KnownEntid) -> Entid {
|
|
||||||
k.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<KnownEntid> for TypedValue {
|
|
||||||
fn from(k: KnownEntid) -> TypedValue {
|
|
||||||
TypedValue::Ref(k.0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The attribute of each Mentat assertion has a :db/valueType constraining the value to a
|
|
||||||
/// particular set. Mentat recognizes the following :db/valueType values.
|
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
|
||||||
#[repr(u32)]
|
|
||||||
pub enum ValueType {
|
|
||||||
Ref,
|
|
||||||
Boolean,
|
|
||||||
Instant,
|
|
||||||
Long,
|
|
||||||
Double,
|
|
||||||
String,
|
|
||||||
Keyword,
|
|
||||||
Uuid,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type ValueTypeTag = i32;
|
pub type ValueTypeTag = i32;
|
||||||
|
|
||||||
impl ValueType {
|
|
||||||
pub fn all_enums() -> EnumSet<ValueType> {
|
|
||||||
// TODO: lazy_static.
|
|
||||||
let mut s = EnumSet::new();
|
|
||||||
s.insert(ValueType::Ref);
|
|
||||||
s.insert(ValueType::Boolean);
|
|
||||||
s.insert(ValueType::Instant);
|
|
||||||
s.insert(ValueType::Long);
|
|
||||||
s.insert(ValueType::Double);
|
|
||||||
s.insert(ValueType::String);
|
|
||||||
s.insert(ValueType::Keyword);
|
|
||||||
s.insert(ValueType::Uuid);
|
|
||||||
s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
impl ::enum_set::CLike for ValueType {
|
|
||||||
fn to_u32(&self) -> u32 {
|
|
||||||
*self as u32
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe fn from_u32(v: u32) -> ValueType {
|
|
||||||
::std::mem::transmute(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ValueType {
|
|
||||||
pub fn into_keyword(self) -> Keyword {
|
|
||||||
Keyword::namespaced("db.type", match self {
|
|
||||||
ValueType::Ref => "ref",
|
|
||||||
ValueType::Boolean => "boolean",
|
|
||||||
ValueType::Instant => "instant",
|
|
||||||
ValueType::Long => "long",
|
|
||||||
ValueType::Double => "double",
|
|
||||||
ValueType::String => "string",
|
|
||||||
ValueType::Keyword => "keyword",
|
|
||||||
ValueType::Uuid => "uuid",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn from_keyword(keyword: &Keyword) -> Option<Self> {
|
|
||||||
if keyword.namespace() != Some("db.type") {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
return match keyword.name() {
|
|
||||||
"ref" => Some(ValueType::Ref),
|
|
||||||
"boolean" => Some(ValueType::Boolean),
|
|
||||||
"instant" => Some(ValueType::Instant),
|
|
||||||
"long" => Some(ValueType::Long),
|
|
||||||
"double" => Some(ValueType::Double),
|
|
||||||
"string" => Some(ValueType::String),
|
|
||||||
"keyword" => Some(ValueType::Keyword),
|
|
||||||
"uuid" => Some(ValueType::Uuid),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_typed_value(self) -> TypedValue {
|
|
||||||
TypedValue::typed_ns_keyword("db.type", match self {
|
|
||||||
ValueType::Ref => "ref",
|
|
||||||
ValueType::Boolean => "boolean",
|
|
||||||
ValueType::Instant => "instant",
|
|
||||||
ValueType::Long => "long",
|
|
||||||
ValueType::Double => "double",
|
|
||||||
ValueType::String => "string",
|
|
||||||
ValueType::Keyword => "keyword",
|
|
||||||
ValueType::Uuid => "uuid",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_edn_value(self) -> edn::Value {
|
|
||||||
match self {
|
|
||||||
ValueType::Ref => values::DB_TYPE_REF.clone(),
|
|
||||||
ValueType::Boolean => values::DB_TYPE_BOOLEAN.clone(),
|
|
||||||
ValueType::Instant => values::DB_TYPE_INSTANT.clone(),
|
|
||||||
ValueType::Long => values::DB_TYPE_LONG.clone(),
|
|
||||||
ValueType::Double => values::DB_TYPE_DOUBLE.clone(),
|
|
||||||
ValueType::String => values::DB_TYPE_STRING.clone(),
|
|
||||||
ValueType::Keyword => values::DB_TYPE_KEYWORD.clone(),
|
|
||||||
ValueType::Uuid => values::DB_TYPE_UUID.clone(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_numeric(&self) -> bool {
|
|
||||||
match self {
|
|
||||||
&ValueType::Long | &ValueType::Double => true,
|
|
||||||
_ => false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for ValueType {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(f, "{}", match *self {
|
|
||||||
ValueType::Ref => ":db.type/ref",
|
|
||||||
ValueType::Boolean => ":db.type/boolean",
|
|
||||||
ValueType::Instant => ":db.type/instant",
|
|
||||||
ValueType::Long => ":db.type/long",
|
|
||||||
ValueType::Double => ":db.type/double",
|
|
||||||
ValueType::String => ":db.type/string",
|
|
||||||
ValueType::Keyword => ":db.type/keyword",
|
|
||||||
ValueType::Uuid => ":db.type/uuid",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Represents a value that can be stored in a Mentat store.
|
|
||||||
// TODO: expand to include :db.type/uri. https://github.com/mozilla/mentat/issues/201
|
|
||||||
// TODO: JSON data type? https://github.com/mozilla/mentat/issues/31
|
|
||||||
// TODO: BigInt? Bytes?
|
|
||||||
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq, Serialize, Deserialize)]
|
|
||||||
pub enum TypedValue {
|
|
||||||
Ref(Entid),
|
|
||||||
Boolean(bool),
|
|
||||||
Long(i64),
|
|
||||||
Double(OrderedFloat<f64>),
|
|
||||||
Instant(DateTime<Utc>), // Use `into()` to ensure truncation.
|
|
||||||
// TODO: &str throughout?
|
|
||||||
String(ValueRc<String>),
|
|
||||||
Keyword(ValueRc<Keyword>),
|
|
||||||
Uuid(Uuid), // It's only 128 bits, so this should be acceptable to clone.
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The values bound in a query specification can be:
|
|
||||||
///
|
|
||||||
/// * Vecs of structured values, for multi-valued component attributes or nested expressions.
|
|
||||||
/// * Single structured values, for single-valued component attributes or nested expressions.
|
|
||||||
/// * Single typed values, for simple attributes.
|
|
||||||
///
|
|
||||||
/// The `Binding` enum defines these three options.
|
|
||||||
///
|
|
||||||
/// Datomic also supports structured inputs; at present Mentat does not, but this type
|
|
||||||
/// would also serve that purpose.
|
|
||||||
///
|
|
||||||
/// Note that maps are not ordered, and so `Binding` is neither `Ord` nor `PartialOrd`.
|
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
||||||
pub enum Binding {
|
|
||||||
Scalar(TypedValue),
|
|
||||||
Vec(ValueRc<Vec<Binding>>),
|
|
||||||
Map(ValueRc<StructuredMap>),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T> From<T> for Binding where T: Into<TypedValue> {
|
|
||||||
fn from(value: T) -> Self {
|
|
||||||
Binding::Scalar(value.into())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<StructuredMap> for Binding {
|
|
||||||
fn from(value: StructuredMap) -> Self {
|
|
||||||
Binding::Map(ValueRc::new(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Vec<Binding>> for Binding {
|
|
||||||
fn from(value: Vec<Binding>) -> Self {
|
|
||||||
Binding::Vec(ValueRc::new(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Binding {
|
|
||||||
pub fn val(self) -> Option<TypedValue> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A pull expression expands a binding into a structure. The returned structure
|
|
||||||
/// associates attributes named in the input or retrieved from the store with values.
|
|
||||||
/// This association is a `StructuredMap`.
|
|
||||||
///
|
|
||||||
/// Note that 'attributes' in Datomic's case can mean:
|
|
||||||
/// - Reversed attribute keywords (:artist/_country).
|
|
||||||
/// - An alias using `:as` (:artist/name :as "Band name").
|
|
||||||
///
|
|
||||||
/// We entirely support the former, and partially support the latter -- you can alias
|
|
||||||
/// using a different keyword only.
|
|
||||||
#[derive(Clone, Debug, Default, Eq, PartialEq)]
|
|
||||||
pub struct StructuredMap(pub IndexMap<ValueRc<Keyword>, Binding>);
|
|
||||||
|
|
||||||
impl StructuredMap {
|
|
||||||
pub fn insert<N, B>(&mut self, name: N, value: B) where N: Into<ValueRc<Keyword>>, B: Into<Binding> {
|
|
||||||
self.0.insert(name.into(), value.into());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<IndexMap<ValueRc<Keyword>, Binding>> for StructuredMap {
|
|
||||||
fn from(src: IndexMap<ValueRc<Keyword>, Binding>) -> Self {
|
|
||||||
StructuredMap(src)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mostly for testing.
|
|
||||||
impl<T> From<Vec<(Keyword, T)>> for StructuredMap where T: Into<Binding> {
|
|
||||||
fn from(value: Vec<(Keyword, T)>) -> Self {
|
|
||||||
let mut sm = StructuredMap::default();
|
|
||||||
for (k, v) in value.into_iter() {
|
|
||||||
sm.insert(k, v);
|
|
||||||
}
|
|
||||||
sm
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Binding {
|
|
||||||
/// Returns true if the provided type is `Some` and matches this value's type, or if the
|
|
||||||
/// provided type is `None`.
|
|
||||||
#[inline]
|
|
||||||
pub fn is_congruent_with<T: Into<Option<ValueType>>>(&self, t: T) -> bool {
|
|
||||||
t.into().map_or(true, |x| self.matches_type(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn matches_type(&self, t: ValueType) -> bool {
|
|
||||||
self.value_type() == Some(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn value_type(&self) -> Option<ValueType> {
|
|
||||||
match self {
|
|
||||||
&Binding::Scalar(ref v) => Some(v.value_type()),
|
|
||||||
|
|
||||||
&Binding::Map(_) => None,
|
|
||||||
&Binding::Vec(_) => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
impl TypedValue {
|
|
||||||
/// Returns true if the provided type is `Some` and matches this value's type, or if the
|
|
||||||
/// provided type is `None`.
|
|
||||||
#[inline]
|
|
||||||
pub fn is_congruent_with<T: Into<Option<ValueType>>>(&self, t: T) -> bool {
|
|
||||||
t.into().map_or(true, |x| self.matches_type(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn matches_type(&self, t: ValueType) -> bool {
|
|
||||||
self.value_type() == t
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn value_type(&self) -> ValueType {
|
|
||||||
match self {
|
|
||||||
&TypedValue::Ref(_) => ValueType::Ref,
|
|
||||||
&TypedValue::Boolean(_) => ValueType::Boolean,
|
|
||||||
&TypedValue::Long(_) => ValueType::Long,
|
|
||||||
&TypedValue::Instant(_) => ValueType::Instant,
|
|
||||||
&TypedValue::Double(_) => ValueType::Double,
|
|
||||||
&TypedValue::String(_) => ValueType::String,
|
|
||||||
&TypedValue::Keyword(_) => ValueType::Keyword,
|
|
||||||
&TypedValue::Uuid(_) => ValueType::Uuid,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Construct a new `TypedValue::Keyword` instance by cloning the provided
|
|
||||||
/// values and wrapping them in a new `ValueRc`. This is expensive, so this might
|
|
||||||
/// be best limited to tests.
|
|
||||||
pub fn typed_ns_keyword(ns: &str, name: &str) -> TypedValue {
|
|
||||||
Keyword::namespaced(ns, name).into()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Construct a new `TypedValue::String` instance by cloning the provided
|
|
||||||
/// value and wrapping it in a new `ValueRc`. This is expensive, so this might
|
|
||||||
/// be best limited to tests.
|
|
||||||
pub fn typed_string(s: &str) -> TypedValue {
|
|
||||||
s.into()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn current_instant() -> TypedValue {
|
|
||||||
Utc::now().into()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Construct a new `TypedValue::Instant` instance from the provided
|
|
||||||
/// microsecond timestamp.
|
|
||||||
pub fn instant(micros: i64) -> TypedValue {
|
|
||||||
DateTime::<Utc>::from_micros(micros).into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
trait MicrosecondPrecision {
|
|
||||||
/// Truncate the provided `DateTime` to microsecond precision.
|
|
||||||
fn microsecond_precision(self) -> Self;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MicrosecondPrecision for DateTime<Utc> {
|
|
||||||
fn microsecond_precision(self) -> DateTime<Utc> {
|
|
||||||
let nanoseconds = self.nanosecond();
|
|
||||||
if nanoseconds % 1000 == 0 {
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
let microseconds = nanoseconds / 1000;
|
|
||||||
let truncated = microseconds * 1000;
|
|
||||||
self.with_nanosecond(truncated).expect("valid timestamp")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return the current time as a UTC `DateTime` instance with microsecond precision.
|
|
||||||
pub fn now() -> DateTime<Utc> {
|
|
||||||
Utc::now().microsecond_precision()
|
|
||||||
}
|
|
||||||
|
|
||||||
// We don't do From<i64> or From<Entid> 'cos it's ambiguous.
|
|
||||||
|
|
||||||
impl From<bool> for TypedValue {
|
|
||||||
fn from(value: bool) -> TypedValue {
|
|
||||||
TypedValue::Boolean(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Truncate the provided `DateTime` to microsecond precision, and return the corresponding
|
|
||||||
/// `TypedValue::Instant`.
|
|
||||||
impl From<DateTime<Utc>> for TypedValue {
|
|
||||||
fn from(value: DateTime<Utc>) -> TypedValue {
|
|
||||||
TypedValue::Instant(value.microsecond_precision())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Uuid> for TypedValue {
|
|
||||||
fn from(value: Uuid) -> TypedValue {
|
|
||||||
TypedValue::Uuid(value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> From<&'a str> for TypedValue {
|
|
||||||
fn from(value: &'a str) -> TypedValue {
|
|
||||||
TypedValue::String(ValueRc::new(value.to_string()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Arc<String>> for TypedValue {
|
|
||||||
fn from(value: Arc<String>) -> TypedValue {
|
|
||||||
TypedValue::String(ValueRc::from_arc(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Rc<String>> for TypedValue {
|
|
||||||
fn from(value: Rc<String>) -> TypedValue {
|
|
||||||
TypedValue::String(ValueRc::from_rc(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Box<String>> for TypedValue {
|
|
||||||
fn from(value: Box<String>) -> TypedValue {
|
|
||||||
TypedValue::String(ValueRc::new(*value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<String> for TypedValue {
|
|
||||||
fn from(value: String) -> TypedValue {
|
|
||||||
TypedValue::String(ValueRc::new(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Arc<Keyword>> for TypedValue {
|
|
||||||
fn from(value: Arc<Keyword>) -> TypedValue {
|
|
||||||
TypedValue::Keyword(ValueRc::from_arc(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Rc<Keyword>> for TypedValue {
|
|
||||||
fn from(value: Rc<Keyword>) -> TypedValue {
|
|
||||||
TypedValue::Keyword(ValueRc::from_rc(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Keyword> for TypedValue {
|
|
||||||
fn from(value: Keyword) -> TypedValue {
|
|
||||||
TypedValue::Keyword(ValueRc::new(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<u32> for TypedValue {
|
|
||||||
fn from(value: u32) -> TypedValue {
|
|
||||||
TypedValue::Long(value as i64)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<i32> for TypedValue {
|
|
||||||
fn from(value: i32) -> TypedValue {
|
|
||||||
TypedValue::Long(value as i64)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<f64> for TypedValue {
|
|
||||||
fn from(value: f64) -> TypedValue {
|
|
||||||
TypedValue::Double(OrderedFloat(value))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TypedValue {
|
|
||||||
pub fn into_known_entid(self) -> Option<KnownEntid> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Ref(v) => Some(KnownEntid(v)),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_entid(self) -> Option<Entid> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Ref(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_kw(self) -> Option<ValueRc<Keyword>> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Keyword(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_boolean(self) -> Option<bool> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Boolean(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_long(self) -> Option<i64> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Long(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_double(self) -> Option<f64> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Double(v) => Some(v.into_inner()),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_instant(self) -> Option<DateTime<Utc>> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Instant(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_timestamp(self) -> Option<i64> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Instant(v) => Some(v.timestamp()),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_string(self) -> Option<ValueRc<String>> {
|
|
||||||
match self {
|
|
||||||
TypedValue::String(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_c_string(self) -> Option<*mut c_char> {
|
|
||||||
match self {
|
|
||||||
TypedValue::String(v) => {
|
|
||||||
// Get an independent copy of the string.
|
|
||||||
let s: String = v.cloned();
|
|
||||||
|
|
||||||
// Make a CString out of the new bytes.
|
|
||||||
let c: CString = CString::new(s).expect("String conversion failed!");
|
|
||||||
|
|
||||||
// Return a C-owned pointer.
|
|
||||||
Some(c.into_raw())
|
|
||||||
},
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_kw_c_string(self) -> Option<*mut c_char> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Keyword(v) => {
|
|
||||||
// Get an independent copy of the string.
|
|
||||||
let s: String = v.to_string();
|
|
||||||
|
|
||||||
// Make a CString out of the new bytes.
|
|
||||||
let c: CString = CString::new(s).expect("String conversion failed!");
|
|
||||||
|
|
||||||
// Return a C-owned pointer.
|
|
||||||
Some(c.into_raw())
|
|
||||||
},
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_uuid_c_string(self) -> Option<*mut c_char> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Uuid(v) => {
|
|
||||||
// Get an independent copy of the string.
|
|
||||||
let s: String = v.hyphenated().to_string();
|
|
||||||
|
|
||||||
// Make a CString out of the new bytes.
|
|
||||||
let c: CString = CString::new(s).expect("String conversion failed!");
|
|
||||||
|
|
||||||
// Return a C-owned pointer.
|
|
||||||
Some(c.into_raw())
|
|
||||||
},
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_uuid(self) -> Option<Uuid> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Uuid(v) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_uuid_string(self) -> Option<String> {
|
|
||||||
match self {
|
|
||||||
TypedValue::Uuid(v) => Some(v.hyphenated().to_string()),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Binding {
|
|
||||||
pub fn into_known_entid(self) -> Option<KnownEntid> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Ref(v)) => Some(KnownEntid(v)),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_entid(self) -> Option<Entid> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Ref(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_kw(self) -> Option<ValueRc<Keyword>> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Keyword(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_boolean(self) -> Option<bool> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Boolean(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_long(self) -> Option<i64> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Long(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_double(self) -> Option<f64> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Double(v)) => Some(v.into_inner()),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_instant(self) -> Option<DateTime<Utc>> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Instant(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_timestamp(self) -> Option<i64> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Instant(v)) => Some(v.timestamp()),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_string(self) -> Option<ValueRc<String>> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::String(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_uuid(self) -> Option<Uuid> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Uuid(v)) => Some(v),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_uuid_string(self) -> Option<String> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(TypedValue::Uuid(v)) => Some(v.hyphenated().to_string()),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_c_string(self) -> Option<*mut c_char> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(v) => v.into_c_string(),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_kw_c_string(self) -> Option<*mut c_char> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(v) => v.into_kw_c_string(),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn into_uuid_c_string(self) -> Option<*mut c_char> {
|
|
||||||
match self {
|
|
||||||
Binding::Scalar(v) => v.into_uuid_c_string(),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_typed_value() {
|
|
||||||
assert!(TypedValue::Boolean(false).is_congruent_with(None));
|
|
||||||
assert!(TypedValue::Boolean(false).is_congruent_with(ValueType::Boolean));
|
|
||||||
assert!(!TypedValue::typed_string("foo").is_congruent_with(ValueType::Boolean));
|
|
||||||
assert!(TypedValue::typed_string("foo").is_congruent_with(ValueType::String));
|
|
||||||
assert!(TypedValue::typed_string("foo").is_congruent_with(None));
|
|
||||||
}
|
|
||||||
|
|
|
@ -67,7 +67,8 @@ pub enum Either<L, R> {
|
||||||
// Cribbed from https://github.com/bluss/either/blob/f793721f3fdeb694f009e731b23a2858286bc0d6/src/lib.rs#L219-L259.
|
// Cribbed from https://github.com/bluss/either/blob/f793721f3fdeb694f009e731b23a2858286bc0d6/src/lib.rs#L219-L259.
|
||||||
impl<L, R> Either<L, R> {
|
impl<L, R> Either<L, R> {
|
||||||
pub fn map_left<F, M>(self, f: F) -> Either<M, R>
|
pub fn map_left<F, M>(self, f: F) -> Either<M, R>
|
||||||
where F: FnOnce(L) -> M
|
where
|
||||||
|
F: FnOnce(L) -> M,
|
||||||
{
|
{
|
||||||
use self::Either::*;
|
use self::Either::*;
|
||||||
match self {
|
match self {
|
||||||
|
@ -77,7 +78,8 @@ impl<L, R> Either<L, R> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn map_right<F, S>(self, f: F) -> Either<L, S>
|
pub fn map_right<F, S>(self, f: F) -> Either<L, S>
|
||||||
where F: FnOnce(R) -> S
|
where
|
||||||
|
F: FnOnce(R) -> S,
|
||||||
{
|
{
|
||||||
use self::Either::*;
|
use self::Either::*;
|
||||||
match self {
|
match self {
|
||||||
|
|
25
db-traits/Cargo.toml
Normal file
25
db-traits/Cargo.toml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
[package]
|
||||||
|
name = "db_traits"
|
||||||
|
version = "0.0.2"
|
||||||
|
workspace = ".."
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "db_traits"
|
||||||
|
path = "lib.rs"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
sqlcipher = ["rusqlite/sqlcipher"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
failure = "~0.1"
|
||||||
|
failure_derive = "~0.1"
|
||||||
|
|
||||||
|
[dependencies.edn]
|
||||||
|
path = "../edn"
|
||||||
|
|
||||||
|
[dependencies.core_traits]
|
||||||
|
path = "../core-traits"
|
||||||
|
|
||||||
|
[dependencies.rusqlite]
|
||||||
|
version = "~0.29"
|
||||||
|
features = ["limits", "bundled"]
|
|
@ -10,40 +10,17 @@
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use failure::{
|
use failure::{Backtrace, Context, Fail};
|
||||||
Backtrace,
|
|
||||||
Context,
|
|
||||||
Error,
|
|
||||||
Fail,
|
|
||||||
};
|
|
||||||
|
|
||||||
use std::collections::{
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
BTreeMap,
|
|
||||||
BTreeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
use rusqlite;
|
use rusqlite;
|
||||||
|
|
||||||
use edn::entities::{
|
use edn::entities::TempId;
|
||||||
TempId,
|
|
||||||
};
|
|
||||||
use mentat_core::{
|
|
||||||
KnownEntid,
|
|
||||||
};
|
|
||||||
use types::{
|
|
||||||
Entid,
|
|
||||||
TypedValue,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[macro_export]
|
use core_traits::{Entid, KnownEntid, TypedValue, ValueType};
|
||||||
macro_rules! bail {
|
|
||||||
($e:expr) => (
|
|
||||||
return Err($e.into());
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub type Result<T> = ::std::result::Result<T, Error>;
|
pub type Result<T> = ::std::result::Result<T, DbError>;
|
||||||
|
|
||||||
// TODO Error/ErrorKind pair
|
// TODO Error/ErrorKind pair
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
|
@ -81,45 +58,51 @@ pub enum SchemaConstraintViolation {
|
||||||
/// A transaction tried to assert a datom or datoms with the wrong value `v` type(s).
|
/// A transaction tried to assert a datom or datoms with the wrong value `v` type(s).
|
||||||
TypeDisagreements {
|
TypeDisagreements {
|
||||||
/// The key (`[e a v]`) has an invalid value `v`: it is not of the expected value type.
|
/// The key (`[e a v]`) has an invalid value `v`: it is not of the expected value type.
|
||||||
conflicting_datoms: BTreeMap<(Entid, Entid, TypedValue), ValueType>
|
conflicting_datoms: BTreeMap<(Entid, Entid, TypedValue), ValueType>,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// A transaction tried to assert datoms that don't observe the schema's cardinality constraints.
|
/// A transaction tried to assert datoms that don't observe the schema's cardinality constraints.
|
||||||
CardinalityConflicts {
|
CardinalityConflicts { conflicts: Vec<CardinalityConflict> },
|
||||||
conflicts: Vec<CardinalityConflict>,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::std::fmt::Display for SchemaConstraintViolation {
|
impl ::std::fmt::Display for SchemaConstraintViolation {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||||
use self::SchemaConstraintViolation::*;
|
use self::SchemaConstraintViolation::*;
|
||||||
match self {
|
match self {
|
||||||
&ConflictingUpserts { ref conflicting_upserts } => {
|
ConflictingUpserts {
|
||||||
|
ref conflicting_upserts,
|
||||||
|
} => {
|
||||||
writeln!(f, "conflicting upserts:")?;
|
writeln!(f, "conflicting upserts:")?;
|
||||||
for (tempid, entids) in conflicting_upserts {
|
for (tempid, entids) in conflicting_upserts {
|
||||||
writeln!(f, " tempid {:?} upserts to {:?}", tempid, entids)?;
|
writeln!(f, " tempid {:?} upserts to {:?}", tempid, entids)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
}
|
||||||
&TypeDisagreements { ref conflicting_datoms } => {
|
TypeDisagreements {
|
||||||
|
ref conflicting_datoms,
|
||||||
|
} => {
|
||||||
writeln!(f, "type disagreements:")?;
|
writeln!(f, "type disagreements:")?;
|
||||||
for (ref datom, expected_type) in conflicting_datoms {
|
for (ref datom, expected_type) in conflicting_datoms {
|
||||||
writeln!(f, " expected value of type {} but got datom [{} {} {:?}]", expected_type, datom.0, datom.1, datom.2)?;
|
writeln!(
|
||||||
|
f,
|
||||||
|
" expected value of type {} but got datom [{} {} {:?}]",
|
||||||
|
expected_type, datom.0, datom.1, datom.2
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
}
|
||||||
&CardinalityConflicts { ref conflicts } => {
|
CardinalityConflicts { ref conflicts } => {
|
||||||
writeln!(f, "cardinality conflicts:")?;
|
writeln!(f, "cardinality conflicts:")?;
|
||||||
for ref conflict in conflicts {
|
for conflict in conflicts {
|
||||||
writeln!(f, " {:?}", conflict)?;
|
writeln!(f, " {:?}", conflict)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Copy, Clone, Eq, PartialEq, Debug, Fail)]
|
||||||
pub enum InputError {
|
pub enum InputError {
|
||||||
/// Map notation included a bad `:db/id` value.
|
/// Map notation included a bad `:db/id` value.
|
||||||
BadDbId,
|
BadDbId,
|
||||||
|
@ -133,25 +116,76 @@ impl ::std::fmt::Display for InputError {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||||
use self::InputError::*;
|
use self::InputError::*;
|
||||||
match self {
|
match self {
|
||||||
&BadDbId => {
|
BadDbId => {
|
||||||
writeln!(f, ":db/id in map notation must either not be present or be an entid, an ident, or a tempid")
|
writeln!(f, ":db/id in map notation must either not be present or be an entid, an ident, or a tempid")
|
||||||
},
|
}
|
||||||
&BadEntityPlace => {
|
BadEntityPlace => {
|
||||||
writeln!(f, "cannot convert value place into entity place")
|
writeln!(f, "cannot convert value place into entity place")
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Fail)]
|
#[derive(Debug)]
|
||||||
pub enum DbError {
|
pub struct DbError {
|
||||||
/// We're just not done yet. Message that the feature is recognized but not yet
|
inner: Context<DbErrorKind>,
|
||||||
/// implemented.
|
}
|
||||||
|
|
||||||
|
impl ::std::fmt::Display for DbError {
|
||||||
|
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||||
|
::std::fmt::Display::fmt(&self.inner, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Fail for DbError {
|
||||||
|
fn cause(&self) -> Option<&dyn Fail> {
|
||||||
|
self.inner.cause()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn backtrace(&self) -> Option<&Backtrace> {
|
||||||
|
self.inner.backtrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DbError {
|
||||||
|
pub fn kind(&self) -> DbErrorKind {
|
||||||
|
self.inner.get_context().clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<DbErrorKind> for DbError {
|
||||||
|
fn from(kind: DbErrorKind) -> Self {
|
||||||
|
DbError {
|
||||||
|
inner: Context::new(kind),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Context<DbErrorKind>> for DbError {
|
||||||
|
fn from(inner: Context<DbErrorKind>) -> Self {
|
||||||
|
DbError { inner }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<rusqlite::Error> for DbError {
|
||||||
|
fn from(error: rusqlite::Error) -> Self {
|
||||||
|
DbError {
|
||||||
|
inner: Context::new(DbErrorKind::RusqliteError(error.to_string())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, PartialEq, Debug, Fail)]
|
||||||
|
pub enum DbErrorKind {
|
||||||
|
/// We're just not done yet. Recognized a feature that is not yet implemented.
|
||||||
#[fail(display = "not yet implemented: {}", _0)]
|
#[fail(display = "not yet implemented: {}", _0)]
|
||||||
NotYetImplemented(String),
|
NotYetImplemented(String),
|
||||||
|
|
||||||
/// We've been given a value that isn't the correct Mentat type.
|
/// We've been given a value that isn't the correct Mentat type.
|
||||||
#[fail(display = "value '{}' is not the expected Mentat value type {:?}", _0, _1)]
|
#[fail(
|
||||||
|
display = "value '{}' is not the expected Mentat value type {:?}",
|
||||||
|
_0, _1
|
||||||
|
)]
|
||||||
BadValuePair(String, ValueType),
|
BadValuePair(String, ValueType),
|
||||||
|
|
||||||
/// We've got corrupt data in the SQL store: a value and value_type_tag don't line up.
|
/// We've got corrupt data in the SQL store: a value and value_type_tag don't line up.
|
||||||
|
@ -159,11 +193,10 @@ pub enum DbError {
|
||||||
#[fail(display = "bad SQL (value_type_tag, value) pair: ({:?}, {:?})", _0, _1)]
|
#[fail(display = "bad SQL (value_type_tag, value) pair: ({:?}, {:?})", _0, _1)]
|
||||||
BadSQLValuePair(rusqlite::types::Value, i32),
|
BadSQLValuePair(rusqlite::types::Value, i32),
|
||||||
|
|
||||||
// /// The SQLite store user_version isn't recognized. This could be an old version of Mentat
|
/// The SQLite store user_version isn't recognized. This could be an old version of Mentat
|
||||||
// /// trying to open a newer version SQLite store; or it could be a corrupt file; or ...
|
/// trying to open a newer version SQLite store; or it could be a corrupt file; or ...
|
||||||
// #[fail(display = "bad SQL store user_version: {}", _0)]
|
/// #[fail(display = "bad SQL store user_version: {}", _0)]
|
||||||
// BadSQLiteStoreVersion(i32),
|
/// BadSQLiteStoreVersion(i32),
|
||||||
|
|
||||||
/// A bootstrap definition couldn't be parsed or installed. This is a programmer error, not
|
/// A bootstrap definition couldn't be parsed or installed. This is a programmer error, not
|
||||||
/// a runtime error.
|
/// a runtime error.
|
||||||
#[fail(display = "bad bootstrap definition: {}", _0)]
|
#[fail(display = "bad bootstrap definition: {}", _0)]
|
||||||
|
@ -178,11 +211,13 @@ pub enum DbError {
|
||||||
UnrecognizedIdent(String),
|
UnrecognizedIdent(String),
|
||||||
|
|
||||||
/// An entid->ident mapping failed.
|
/// An entid->ident mapping failed.
|
||||||
/// We also use this error if you try to transact an entid that we didn't allocate,
|
#[fail(display = "no ident found for entid: {}", _0)]
|
||||||
/// in part because we blow the stack in error_chain if we define a new enum!
|
|
||||||
#[fail(display = "unrecognized or no ident found for entid: {}", _0)]
|
|
||||||
UnrecognizedEntid(Entid),
|
UnrecognizedEntid(Entid),
|
||||||
|
|
||||||
|
/// Tried to transact an entid that isn't allocated.
|
||||||
|
#[fail(display = "entid not allocated: {}", _0)]
|
||||||
|
UnallocatedEntid(Entid),
|
||||||
|
|
||||||
#[fail(display = "unknown attribute for entid: {}", _0)]
|
#[fail(display = "unknown attribute for entid: {}", _0)]
|
||||||
UnknownAttribute(Entid),
|
UnknownAttribute(Entid),
|
||||||
|
|
||||||
|
@ -201,51 +236,15 @@ pub enum DbError {
|
||||||
#[fail(display = "transaction input error: {}", _0)]
|
#[fail(display = "transaction input error: {}", _0)]
|
||||||
InputError(InputError),
|
InputError(InputError),
|
||||||
|
|
||||||
#[fail(display = "Cannot transact a fulltext assertion with a typed value that is not :db/valueType :db.type/string")]
|
#[fail(
|
||||||
|
display = "Cannot transact a fulltext assertion with a typed value that is not :db/valueType :db.type/string"
|
||||||
|
)]
|
||||||
WrongTypeValueForFtsAssertion,
|
WrongTypeValueForFtsAssertion,
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
// SQL errors.
|
||||||
pub struct DbSqlError {
|
#[fail(display = "could not update a cache")]
|
||||||
inner: Context<DbSqlErrorKind>,
|
CacheUpdateFailed,
|
||||||
}
|
|
||||||
|
|
||||||
impl Fail for DbSqlError {
|
|
||||||
fn cause(&self) -> Option<&Fail> {
|
|
||||||
self.inner.cause()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn backtrace(&self) -> Option<&Backtrace> {
|
|
||||||
self.inner.backtrace()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::fmt::Display for DbSqlError {
|
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
|
||||||
::std::fmt::Display::fmt(&self.inner, f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DbSqlError {
|
|
||||||
pub fn kind(&self) -> DbSqlErrorKind {
|
|
||||||
*self.inner.get_context()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<DbSqlErrorKind> for DbSqlError {
|
|
||||||
fn from(kind: DbSqlErrorKind) -> DbSqlError {
|
|
||||||
DbSqlError { inner: Context::new(kind) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<Context<DbSqlErrorKind>> for DbSqlError {
|
|
||||||
fn from(inner: Context<DbSqlErrorKind>) -> DbSqlError {
|
|
||||||
DbSqlError { inner: inner }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Eq, PartialEq, Debug, Fail)]
|
|
||||||
pub enum DbSqlErrorKind {
|
|
||||||
#[fail(display = "Could not set_user_version")]
|
#[fail(display = "Could not set_user_version")]
|
||||||
CouldNotSetVersionPragma,
|
CouldNotSetVersionPragma,
|
||||||
|
|
||||||
|
@ -284,4 +283,18 @@ pub enum DbSqlErrorKind {
|
||||||
|
|
||||||
#[fail(display = "Could not update partition map")]
|
#[fail(display = "Could not update partition map")]
|
||||||
FailedToUpdatePartitionMap,
|
FailedToUpdatePartitionMap,
|
||||||
|
|
||||||
|
#[fail(display = "Can't operate over mixed timelines")]
|
||||||
|
TimelinesMixed,
|
||||||
|
|
||||||
|
#[fail(display = "Can't move transactions to a non-empty timeline")]
|
||||||
|
TimelinesMoveToNonEmpty,
|
||||||
|
|
||||||
|
#[fail(display = "Supplied an invalid transaction range")]
|
||||||
|
TimelinesInvalidRange,
|
||||||
|
|
||||||
|
// It would be better to capture the underlying `rusqlite::Error`, but that type doesn't
|
||||||
|
// implement many useful traits, including `Clone`, `Eq`, and `PartialEq`.
|
||||||
|
#[fail(display = "SQL error: {}", _0)]
|
||||||
|
RusqliteError(String),
|
||||||
}
|
}
|
18
db-traits/lib.rs
Normal file
18
db-traits/lib.rs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
// Copyright 2018 Mozilla
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||||
|
// this file except in compliance with the License. You may obtain a copy of the
|
||||||
|
// License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
|
extern crate failure;
|
||||||
|
extern crate failure_derive;
|
||||||
|
extern crate rusqlite;
|
||||||
|
|
||||||
|
extern crate core_traits;
|
||||||
|
extern crate edn;
|
||||||
|
|
||||||
|
pub mod errors;
|
|
@ -1,27 +1,29 @@
|
||||||
[package]
|
[package]
|
||||||
name = "mentat_db"
|
name = "mentat_db"
|
||||||
version = "0.0.1"
|
version = "0.0.2"
|
||||||
workspace = ".."
|
workspace = ".."
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
sqlcipher = ["rusqlite/sqlcipher"]
|
sqlcipher = ["rusqlite/sqlcipher"]
|
||||||
|
syncable = ["serde", "serde_json", "serde_derive"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
failure = "0.1.1"
|
failure = "~0.1"
|
||||||
failure_derive = "0.1.1"
|
indexmap = "~1.9"
|
||||||
indexmap = "1"
|
itertools = "~0.10"
|
||||||
itertools = "0.7"
|
lazy_static = "~1.4"
|
||||||
lazy_static = "0.2"
|
log = "~0.4"
|
||||||
log = "0.4"
|
ordered-float = "~2.8"
|
||||||
num = "0.1"
|
time = "~0.3"
|
||||||
ordered-float = "0.5"
|
petgraph = "~0.6"
|
||||||
time = "0.1"
|
serde = { version = "~1.0", optional = true }
|
||||||
petgraph = "0.4.12"
|
serde_json = { version = "~1.0", optional = true }
|
||||||
|
serde_derive = { version = "~1.0", optional = true }
|
||||||
|
|
||||||
[dependencies.rusqlite]
|
[dependencies.rusqlite]
|
||||||
version = "0.13"
|
version = "~0.29"
|
||||||
features = ["limits"]
|
features = ["limits", "bundled"]
|
||||||
|
|
||||||
[dependencies.edn]
|
[dependencies.edn]
|
||||||
path = "../edn"
|
path = "../edn"
|
||||||
|
@ -29,12 +31,19 @@ path = "../edn"
|
||||||
[dependencies.mentat_core]
|
[dependencies.mentat_core]
|
||||||
path = "../core"
|
path = "../core"
|
||||||
|
|
||||||
|
[dependencies.core_traits]
|
||||||
|
path = "../core-traits"
|
||||||
|
|
||||||
|
[dependencies.db_traits]
|
||||||
|
path = "../db-traits"
|
||||||
|
|
||||||
[dependencies.mentat_sql]
|
[dependencies.mentat_sql]
|
||||||
path = "../sql"
|
path = "../sql"
|
||||||
|
|
||||||
# Should be dev-dependencies.
|
# TODO: This should be in dev-dependencies.
|
||||||
[dependencies.tabwriter]
|
[dependencies.tabwriter]
|
||||||
version = "1.0.3"
|
version = "~1.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
env_logger = "0.5"
|
env_logger = "0.9"
|
||||||
|
#tabwriter = { version = "1.2.1" }
|
||||||
|
|
|
@ -24,7 +24,10 @@ pub struct AddRetractAlterSet<K, V> {
|
||||||
pub altered: BTreeMap<K, (V, V)>,
|
pub altered: BTreeMap<K, (V, V)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<K, V> Default for AddRetractAlterSet<K, V> where K: Ord {
|
impl<K, V> Default for AddRetractAlterSet<K, V>
|
||||||
|
where
|
||||||
|
K: Ord,
|
||||||
|
{
|
||||||
fn default() -> AddRetractAlterSet<K, V> {
|
fn default() -> AddRetractAlterSet<K, V> {
|
||||||
AddRetractAlterSet {
|
AddRetractAlterSet {
|
||||||
asserted: BTreeMap::default(),
|
asserted: BTreeMap::default(),
|
||||||
|
@ -34,7 +37,10 @@ impl<K, V> Default for AddRetractAlterSet<K, V> where K: Ord {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<K, V> AddRetractAlterSet<K, V> where K: Ord {
|
impl<K, V> AddRetractAlterSet<K, V>
|
||||||
|
where
|
||||||
|
K: Ord,
|
||||||
|
{
|
||||||
pub fn witness(&mut self, key: K, value: V, added: bool) {
|
pub fn witness(&mut self, key: K, value: V, added: bool) {
|
||||||
if added {
|
if added {
|
||||||
if let Some(retracted_value) = self.retracted.remove(&key) {
|
if let Some(retracted_value) = self.retracted.remove(&key) {
|
||||||
|
@ -42,12 +48,10 @@ impl<K, V> AddRetractAlterSet<K, V> where K: Ord {
|
||||||
} else {
|
} else {
|
||||||
self.asserted.insert(key, value);
|
self.asserted.insert(key, value);
|
||||||
}
|
}
|
||||||
|
} else if let Some(asserted_value) = self.asserted.remove(&key) {
|
||||||
|
self.altered.insert(key, (value, asserted_value));
|
||||||
} else {
|
} else {
|
||||||
if let Some(asserted_value) = self.asserted.remove(&key) {
|
self.retracted.insert(key, value);
|
||||||
self.altered.insert(key, (value, asserted_value));
|
|
||||||
} else {
|
|
||||||
self.retracted.insert(key, value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,29 +10,24 @@
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
use crate::db::TypedSQLValue;
|
||||||
|
use crate::entids;
|
||||||
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
use edn;
|
use edn;
|
||||||
use errors::{
|
|
||||||
DbError,
|
|
||||||
Result,
|
|
||||||
};
|
|
||||||
use edn::types::Value;
|
|
||||||
use edn::symbols;
|
|
||||||
use entids;
|
|
||||||
use db::TypedSQLValue;
|
|
||||||
use edn::entities::Entity;
|
use edn::entities::Entity;
|
||||||
use mentat_core::{
|
use edn::symbols;
|
||||||
IdentMap,
|
use edn::types::Value;
|
||||||
Schema,
|
|
||||||
TypedValue,
|
use core_traits::{values, TypedValue};
|
||||||
values,
|
|
||||||
};
|
use crate::schema::SchemaBuilding;
|
||||||
use schema::SchemaBuilding;
|
use crate::types::{Partition, PartitionMap};
|
||||||
use types::{Partition, PartitionMap};
|
use mentat_core::{IdentMap, Schema};
|
||||||
|
|
||||||
/// The first transaction ID applied to the knowledge base.
|
/// The first transaction ID applied to the knowledge base.
|
||||||
///
|
///
|
||||||
/// This is the start of the :db.part/tx partition.
|
/// This is the start of the :db.part/tx partition.
|
||||||
pub const TX0: i64 = 0x10000000;
|
pub const TX0: i64 = 0x1000_0000;
|
||||||
|
|
||||||
/// This is the start of the :db.part/user partition.
|
/// This is the start of the :db.part/user partition.
|
||||||
pub const USER0: i64 = 0x10000;
|
pub const USER0: i64 = 0x10000;
|
||||||
|
@ -42,76 +37,118 @@ pub const CORE_SCHEMA_VERSION: u32 = 1;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref V1_IDENTS: [(symbols::Keyword, i64); 40] = {
|
static ref V1_IDENTS: [(symbols::Keyword, i64); 40] = {
|
||||||
[(ns_keyword!("db", "ident"), entids::DB_IDENT),
|
[
|
||||||
(ns_keyword!("db.part", "db"), entids::DB_PART_DB),
|
(ns_keyword!("db", "ident"), entids::DB_IDENT),
|
||||||
(ns_keyword!("db", "txInstant"), entids::DB_TX_INSTANT),
|
(ns_keyword!("db.part", "db"), entids::DB_PART_DB),
|
||||||
(ns_keyword!("db.install", "partition"), entids::DB_INSTALL_PARTITION),
|
(ns_keyword!("db", "txInstant"), entids::DB_TX_INSTANT),
|
||||||
(ns_keyword!("db.install", "valueType"), entids::DB_INSTALL_VALUE_TYPE),
|
(
|
||||||
(ns_keyword!("db.install", "attribute"), entids::DB_INSTALL_ATTRIBUTE),
|
ns_keyword!("db.install", "partition"),
|
||||||
(ns_keyword!("db", "valueType"), entids::DB_VALUE_TYPE),
|
entids::DB_INSTALL_PARTITION,
|
||||||
(ns_keyword!("db", "cardinality"), entids::DB_CARDINALITY),
|
),
|
||||||
(ns_keyword!("db", "unique"), entids::DB_UNIQUE),
|
(
|
||||||
(ns_keyword!("db", "isComponent"), entids::DB_IS_COMPONENT),
|
ns_keyword!("db.install", "valueType"),
|
||||||
(ns_keyword!("db", "index"), entids::DB_INDEX),
|
entids::DB_INSTALL_VALUE_TYPE,
|
||||||
(ns_keyword!("db", "fulltext"), entids::DB_FULLTEXT),
|
),
|
||||||
(ns_keyword!("db", "noHistory"), entids::DB_NO_HISTORY),
|
(
|
||||||
(ns_keyword!("db", "add"), entids::DB_ADD),
|
ns_keyword!("db.install", "attribute"),
|
||||||
(ns_keyword!("db", "retract"), entids::DB_RETRACT),
|
entids::DB_INSTALL_ATTRIBUTE,
|
||||||
(ns_keyword!("db.part", "user"), entids::DB_PART_USER),
|
),
|
||||||
(ns_keyword!("db.part", "tx"), entids::DB_PART_TX),
|
(ns_keyword!("db", "valueType"), entids::DB_VALUE_TYPE),
|
||||||
(ns_keyword!("db", "excise"), entids::DB_EXCISE),
|
(ns_keyword!("db", "cardinality"), entids::DB_CARDINALITY),
|
||||||
(ns_keyword!("db.excise", "attrs"), entids::DB_EXCISE_ATTRS),
|
(ns_keyword!("db", "unique"), entids::DB_UNIQUE),
|
||||||
(ns_keyword!("db.excise", "beforeT"), entids::DB_EXCISE_BEFORE_T),
|
(ns_keyword!("db", "isComponent"), entids::DB_IS_COMPONENT),
|
||||||
(ns_keyword!("db.excise", "before"), entids::DB_EXCISE_BEFORE),
|
(ns_keyword!("db", "index"), entids::DB_INDEX),
|
||||||
(ns_keyword!("db.alter", "attribute"), entids::DB_ALTER_ATTRIBUTE),
|
(ns_keyword!("db", "fulltext"), entids::DB_FULLTEXT),
|
||||||
(ns_keyword!("db.type", "ref"), entids::DB_TYPE_REF),
|
(ns_keyword!("db", "noHistory"), entids::DB_NO_HISTORY),
|
||||||
(ns_keyword!("db.type", "keyword"), entids::DB_TYPE_KEYWORD),
|
(ns_keyword!("db", "add"), entids::DB_ADD),
|
||||||
(ns_keyword!("db.type", "long"), entids::DB_TYPE_LONG),
|
(ns_keyword!("db", "retract"), entids::DB_RETRACT),
|
||||||
(ns_keyword!("db.type", "double"), entids::DB_TYPE_DOUBLE),
|
(ns_keyword!("db.part", "user"), entids::DB_PART_USER),
|
||||||
(ns_keyword!("db.type", "string"), entids::DB_TYPE_STRING),
|
(ns_keyword!("db.part", "tx"), entids::DB_PART_TX),
|
||||||
(ns_keyword!("db.type", "uuid"), entids::DB_TYPE_UUID),
|
(ns_keyword!("db", "excise"), entids::DB_EXCISE),
|
||||||
(ns_keyword!("db.type", "uri"), entids::DB_TYPE_URI),
|
(ns_keyword!("db.excise", "attrs"), entids::DB_EXCISE_ATTRS),
|
||||||
(ns_keyword!("db.type", "boolean"), entids::DB_TYPE_BOOLEAN),
|
(
|
||||||
(ns_keyword!("db.type", "instant"), entids::DB_TYPE_INSTANT),
|
ns_keyword!("db.excise", "beforeT"),
|
||||||
(ns_keyword!("db.type", "bytes"), entids::DB_TYPE_BYTES),
|
entids::DB_EXCISE_BEFORE_T,
|
||||||
(ns_keyword!("db.cardinality", "one"), entids::DB_CARDINALITY_ONE),
|
),
|
||||||
(ns_keyword!("db.cardinality", "many"), entids::DB_CARDINALITY_MANY),
|
(ns_keyword!("db.excise", "before"), entids::DB_EXCISE_BEFORE),
|
||||||
(ns_keyword!("db.unique", "value"), entids::DB_UNIQUE_VALUE),
|
(
|
||||||
(ns_keyword!("db.unique", "identity"), entids::DB_UNIQUE_IDENTITY),
|
ns_keyword!("db.alter", "attribute"),
|
||||||
(ns_keyword!("db", "doc"), entids::DB_DOC),
|
entids::DB_ALTER_ATTRIBUTE,
|
||||||
(ns_keyword!("db.schema", "version"), entids::DB_SCHEMA_VERSION),
|
),
|
||||||
(ns_keyword!("db.schema", "attribute"), entids::DB_SCHEMA_ATTRIBUTE),
|
(ns_keyword!("db.type", "ref"), entids::DB_TYPE_REF),
|
||||||
(ns_keyword!("db.schema", "core"), entids::DB_SCHEMA_CORE),
|
(ns_keyword!("db.type", "keyword"), entids::DB_TYPE_KEYWORD),
|
||||||
|
(ns_keyword!("db.type", "long"), entids::DB_TYPE_LONG),
|
||||||
|
(ns_keyword!("db.type", "double"), entids::DB_TYPE_DOUBLE),
|
||||||
|
(ns_keyword!("db.type", "string"), entids::DB_TYPE_STRING),
|
||||||
|
(ns_keyword!("db.type", "uuid"), entids::DB_TYPE_UUID),
|
||||||
|
(ns_keyword!("db.type", "uri"), entids::DB_TYPE_URI),
|
||||||
|
(ns_keyword!("db.type", "boolean"), entids::DB_TYPE_BOOLEAN),
|
||||||
|
(ns_keyword!("db.type", "instant"), entids::DB_TYPE_INSTANT),
|
||||||
|
(ns_keyword!("db.type", "bytes"), entids::DB_TYPE_BYTES),
|
||||||
|
(
|
||||||
|
ns_keyword!("db.cardinality", "one"),
|
||||||
|
entids::DB_CARDINALITY_ONE,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ns_keyword!("db.cardinality", "many"),
|
||||||
|
entids::DB_CARDINALITY_MANY,
|
||||||
|
),
|
||||||
|
(ns_keyword!("db.unique", "value"), entids::DB_UNIQUE_VALUE),
|
||||||
|
(
|
||||||
|
ns_keyword!("db.unique", "identity"),
|
||||||
|
entids::DB_UNIQUE_IDENTITY,
|
||||||
|
),
|
||||||
|
(ns_keyword!("db", "doc"), entids::DB_DOC),
|
||||||
|
(
|
||||||
|
ns_keyword!("db.schema", "version"),
|
||||||
|
entids::DB_SCHEMA_VERSION,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
ns_keyword!("db.schema", "attribute"),
|
||||||
|
entids::DB_SCHEMA_ATTRIBUTE,
|
||||||
|
),
|
||||||
|
(ns_keyword!("db.schema", "core"), entids::DB_SCHEMA_CORE),
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
pub static ref V1_PARTS: [(symbols::Keyword, i64, i64, i64, bool); 3] = {
|
||||||
static ref V1_PARTS: [(symbols::Keyword, i64, i64); 3] = {
|
[
|
||||||
[(ns_keyword!("db.part", "db"), 0, (1 + V1_IDENTS.len()) as i64),
|
(
|
||||||
(ns_keyword!("db.part", "user"), USER0, USER0),
|
ns_keyword!("db.part", "db"),
|
||||||
(ns_keyword!("db.part", "tx"), TX0, TX0),
|
0,
|
||||||
|
USER0 - 1,
|
||||||
|
(1 + V1_IDENTS.len()) as i64,
|
||||||
|
false,
|
||||||
|
),
|
||||||
|
(ns_keyword!("db.part", "user"), USER0, TX0 - 1, USER0, true),
|
||||||
|
(
|
||||||
|
ns_keyword!("db.part", "tx"),
|
||||||
|
TX0,
|
||||||
|
i64::max_value(),
|
||||||
|
TX0,
|
||||||
|
false,
|
||||||
|
),
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
static ref V1_CORE_SCHEMA: [symbols::Keyword; 16] = {
|
||||||
static ref V1_CORE_SCHEMA: [(symbols::Keyword); 16] = {
|
[
|
||||||
[(ns_keyword!("db", "ident")),
|
(ns_keyword!("db", "ident")),
|
||||||
(ns_keyword!("db.install", "partition")),
|
(ns_keyword!("db.install", "partition")),
|
||||||
(ns_keyword!("db.install", "valueType")),
|
(ns_keyword!("db.install", "valueType")),
|
||||||
(ns_keyword!("db.install", "attribute")),
|
(ns_keyword!("db.install", "attribute")),
|
||||||
(ns_keyword!("db", "txInstant")),
|
(ns_keyword!("db", "txInstant")),
|
||||||
(ns_keyword!("db", "valueType")),
|
(ns_keyword!("db", "valueType")),
|
||||||
(ns_keyword!("db", "cardinality")),
|
(ns_keyword!("db", "cardinality")),
|
||||||
(ns_keyword!("db", "doc")),
|
(ns_keyword!("db", "doc")),
|
||||||
(ns_keyword!("db", "unique")),
|
(ns_keyword!("db", "unique")),
|
||||||
(ns_keyword!("db", "isComponent")),
|
(ns_keyword!("db", "isComponent")),
|
||||||
(ns_keyword!("db", "index")),
|
(ns_keyword!("db", "index")),
|
||||||
(ns_keyword!("db", "fulltext")),
|
(ns_keyword!("db", "fulltext")),
|
||||||
(ns_keyword!("db", "noHistory")),
|
(ns_keyword!("db", "noHistory")),
|
||||||
(ns_keyword!("db.alter", "attribute")),
|
(ns_keyword!("db.alter", "attribute")),
|
||||||
(ns_keyword!("db.schema", "version")),
|
(ns_keyword!("db.schema", "version")),
|
||||||
(ns_keyword!("db.schema", "attribute")),
|
(ns_keyword!("db.schema", "attribute")),
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
static ref V1_SYMBOLIC_SCHEMA: Value = {
|
static ref V1_SYMBOLIC_SCHEMA: Value = {
|
||||||
let s = r#"
|
let s = r#"
|
||||||
{:db/ident {:db/valueType :db.type/keyword
|
{:db/ident {:db/valueType :db.type/keyword
|
||||||
|
@ -159,7 +196,9 @@ lazy_static! {
|
||||||
:db/cardinality :db.cardinality/many}}"#;
|
:db/cardinality :db.cardinality/many}}"#;
|
||||||
edn::parse::value(s)
|
edn::parse::value(s)
|
||||||
.map(|v| v.without_spans())
|
.map(|v| v.without_spans())
|
||||||
.map_err(|_| DbError::BadBootstrapDefinition("Unable to parse V1_SYMBOLIC_SCHEMA".into()))
|
.map_err(|_| {
|
||||||
|
DbErrorKind::BadBootstrapDefinition("Unable to parse V1_SYMBOLIC_SCHEMA".into())
|
||||||
|
})
|
||||||
.unwrap()
|
.unwrap()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -167,10 +206,15 @@ lazy_static! {
|
||||||
/// Convert (ident, entid) pairs into [:db/add IDENT :db/ident IDENT] `Value` instances.
|
/// Convert (ident, entid) pairs into [:db/add IDENT :db/ident IDENT] `Value` instances.
|
||||||
fn idents_to_assertions(idents: &[(symbols::Keyword, i64)]) -> Vec<Value> {
|
fn idents_to_assertions(idents: &[(symbols::Keyword, i64)]) -> Vec<Value> {
|
||||||
idents
|
idents
|
||||||
.into_iter()
|
.iter()
|
||||||
.map(|&(ref ident, _)| {
|
.map(|&(ref ident, _)| {
|
||||||
let value = Value::Keyword(ident.clone());
|
let value = Value::Keyword(ident.clone());
|
||||||
Value::Vector(vec![values::DB_ADD.clone(), value.clone(), values::DB_IDENT.clone(), value.clone()])
|
Value::Vector(vec![
|
||||||
|
values::DB_ADD.clone(),
|
||||||
|
value.clone(),
|
||||||
|
values::DB_IDENT.clone(),
|
||||||
|
value,
|
||||||
|
])
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
@ -181,18 +225,22 @@ fn schema_attrs_to_assertions(version: u32, idents: &[symbols::Keyword]) -> Vec<
|
||||||
let schema_attr = Value::Keyword(ns_keyword!("db.schema", "attribute"));
|
let schema_attr = Value::Keyword(ns_keyword!("db.schema", "attribute"));
|
||||||
let schema_version = Value::Keyword(ns_keyword!("db.schema", "version"));
|
let schema_version = Value::Keyword(ns_keyword!("db.schema", "version"));
|
||||||
idents
|
idents
|
||||||
.into_iter()
|
.iter()
|
||||||
.map(|ident| {
|
.map(|ident| {
|
||||||
let value = Value::Keyword(ident.clone());
|
let value = Value::Keyword(ident.clone());
|
||||||
Value::Vector(vec![values::DB_ADD.clone(),
|
Value::Vector(vec![
|
||||||
schema_core.clone(),
|
values::DB_ADD.clone(),
|
||||||
schema_attr.clone(),
|
schema_core.clone(),
|
||||||
value])
|
schema_attr.clone(),
|
||||||
|
value,
|
||||||
|
])
|
||||||
})
|
})
|
||||||
.chain(::std::iter::once(Value::Vector(vec![values::DB_ADD.clone(),
|
.chain(::std::iter::once(Value::Vector(vec![
|
||||||
schema_core.clone(),
|
values::DB_ADD.clone(),
|
||||||
schema_version,
|
schema_core.clone(),
|
||||||
Value::Integer(version as i64)])))
|
schema_version,
|
||||||
|
Value::Integer(version as i64),
|
||||||
|
])))
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,7 +249,10 @@ fn schema_attrs_to_assertions(version: u32, idents: &[symbols::Keyword]) -> Vec<
|
||||||
///
|
///
|
||||||
/// Such triples are closer to what the transactor will produce when processing attribute
|
/// Such triples are closer to what the transactor will produce when processing attribute
|
||||||
/// assertions.
|
/// assertions.
|
||||||
fn symbolic_schema_to_triples(ident_map: &IdentMap, symbolic_schema: &Value) -> Result<Vec<(symbols::Keyword, symbols::Keyword, TypedValue)>> {
|
fn symbolic_schema_to_triples(
|
||||||
|
ident_map: &IdentMap,
|
||||||
|
symbolic_schema: &Value,
|
||||||
|
) -> Result<Vec<(symbols::Keyword, symbols::Keyword, TypedValue)>> {
|
||||||
// Failure here is a coding error, not a runtime error.
|
// Failure here is a coding error, not a runtime error.
|
||||||
let mut triples: Vec<(symbols::Keyword, symbols::Keyword, TypedValue)> = vec![];
|
let mut triples: Vec<(symbols::Keyword, symbols::Keyword, TypedValue)> = vec![];
|
||||||
// TODO: Consider `flat_map` and `map` rather than loop.
|
// TODO: Consider `flat_map` and `map` rather than loop.
|
||||||
|
@ -209,16 +260,22 @@ fn symbolic_schema_to_triples(ident_map: &IdentMap, symbolic_schema: &Value) ->
|
||||||
Value::Map(ref m) => {
|
Value::Map(ref m) => {
|
||||||
for (ident, mp) in m {
|
for (ident, mp) in m {
|
||||||
let ident = match ident {
|
let ident = match ident {
|
||||||
&Value::Keyword(ref ident) => ident,
|
Value::Keyword(ref ident) => ident,
|
||||||
_ => bail!(DbError::BadBootstrapDefinition(format!("Expected namespaced keyword for ident but got '{:?}'", ident))),
|
_ => bail!(DbErrorKind::BadBootstrapDefinition(format!(
|
||||||
|
"Expected namespaced keyword for ident but got '{:?}'",
|
||||||
|
ident
|
||||||
|
))),
|
||||||
};
|
};
|
||||||
match *mp {
|
match *mp {
|
||||||
Value::Map(ref mpp) => {
|
Value::Map(ref mpp) => {
|
||||||
for (attr, value) in mpp {
|
for (attr, value) in mpp {
|
||||||
let attr = match attr {
|
let attr = match attr {
|
||||||
&Value::Keyword(ref attr) => attr,
|
Value::Keyword(ref attr) => attr,
|
||||||
_ => bail!(DbError::BadBootstrapDefinition(format!("Expected namespaced keyword for attr but got '{:?}'", attr))),
|
_ => bail!(DbErrorKind::BadBootstrapDefinition(format!(
|
||||||
};
|
"Expected namespaced keyword for attr but got '{:?}'",
|
||||||
|
attr
|
||||||
|
))),
|
||||||
|
};
|
||||||
|
|
||||||
// We have symbolic idents but the transactor handles entids. Ad-hoc
|
// We have symbolic idents but the transactor handles entids. Ad-hoc
|
||||||
// convert right here. This is a fundamental limitation on the
|
// convert right here. This is a fundamental limitation on the
|
||||||
|
@ -229,23 +286,27 @@ fn symbolic_schema_to_triples(ident_map: &IdentMap, symbolic_schema: &Value) ->
|
||||||
// bootstrap symbolic schema, or by representing the initial bootstrap
|
// bootstrap symbolic schema, or by representing the initial bootstrap
|
||||||
// schema directly as Rust data.
|
// schema directly as Rust data.
|
||||||
let typed_value = match TypedValue::from_edn_value(value) {
|
let typed_value = match TypedValue::from_edn_value(value) {
|
||||||
Some(TypedValue::Keyword(ref k)) => {
|
Some(TypedValue::Keyword(ref k)) => ident_map
|
||||||
ident_map.get(k)
|
.get(k)
|
||||||
.map(|entid| TypedValue::Ref(*entid))
|
.map(|entid| TypedValue::Ref(*entid))
|
||||||
.ok_or(DbError::UnrecognizedIdent(k.to_string()))?
|
.ok_or_else(|| DbErrorKind::UnrecognizedIdent(k.to_string()))?,
|
||||||
},
|
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
_ => bail!(DbError::BadBootstrapDefinition(format!("Expected Mentat typed value for value but got '{:?}'", value)))
|
_ => bail!(DbErrorKind::BadBootstrapDefinition(format!(
|
||||||
|
"Expected Mentat typed value for value but got '{:?}'",
|
||||||
|
value
|
||||||
|
))),
|
||||||
};
|
};
|
||||||
|
|
||||||
triples.push((ident.clone(), attr.clone(), typed_value));
|
triples.push((ident.clone(), attr.clone(), typed_value));
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => bail!(DbError::BadBootstrapDefinition("Expected {:db/ident {:db/attr value ...} ...}".into()))
|
_ => bail!(DbErrorKind::BadBootstrapDefinition(
|
||||||
|
"Expected {:db/ident {:db/attr value ...} ...}".into()
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => bail!(DbError::BadBootstrapDefinition("Expected {...}".into()))
|
_ => bail!(DbErrorKind::BadBootstrapDefinition("Expected {...}".into())),
|
||||||
}
|
}
|
||||||
Ok(triples)
|
Ok(triples)
|
||||||
}
|
}
|
||||||
|
@ -260,48 +321,62 @@ fn symbolic_schema_to_assertions(symbolic_schema: &Value) -> Result<Vec<Value>>
|
||||||
match *mp {
|
match *mp {
|
||||||
Value::Map(ref mpp) => {
|
Value::Map(ref mpp) => {
|
||||||
for (attr, value) in mpp {
|
for (attr, value) in mpp {
|
||||||
assertions.push(Value::Vector(vec![values::DB_ADD.clone(),
|
assertions.push(Value::Vector(vec![
|
||||||
ident.clone(),
|
values::DB_ADD.clone(),
|
||||||
attr.clone(),
|
ident.clone(),
|
||||||
value.clone()]));
|
attr.clone(),
|
||||||
|
value.clone(),
|
||||||
|
]));
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => bail!(DbError::BadBootstrapDefinition("Expected {:db/ident {:db/attr value ...} ...}".into()))
|
_ => bail!(DbErrorKind::BadBootstrapDefinition(
|
||||||
|
"Expected {:db/ident {:db/attr value ...} ...}".into()
|
||||||
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => bail!(DbError::BadBootstrapDefinition("Expected {...}".into()))
|
_ => bail!(DbErrorKind::BadBootstrapDefinition("Expected {...}".into())),
|
||||||
}
|
}
|
||||||
Ok(assertions)
|
Ok(assertions)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn bootstrap_partition_map() -> PartitionMap {
|
pub(crate) fn bootstrap_partition_map() -> PartitionMap {
|
||||||
V1_PARTS.iter()
|
V1_PARTS
|
||||||
.map(|&(ref part, start, index)| (part.to_string(), Partition::new(start, index)))
|
.iter()
|
||||||
.collect()
|
.map(|&(ref part, start, end, index, allow_excision)| {
|
||||||
|
(
|
||||||
|
part.to_string(),
|
||||||
|
Partition::new(start, end, index, allow_excision),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn bootstrap_ident_map() -> IdentMap {
|
pub(crate) fn bootstrap_ident_map() -> IdentMap {
|
||||||
V1_IDENTS.iter()
|
V1_IDENTS
|
||||||
.map(|&(ref ident, entid)| (ident.clone(), entid))
|
.iter()
|
||||||
.collect()
|
.map(|&(ref ident, entid)| (ident.clone(), entid))
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn bootstrap_schema() -> Schema {
|
pub(crate) fn bootstrap_schema() -> Schema {
|
||||||
let ident_map = bootstrap_ident_map();
|
let ident_map = bootstrap_ident_map();
|
||||||
let bootstrap_triples = symbolic_schema_to_triples(&ident_map, &V1_SYMBOLIC_SCHEMA).expect("symbolic schema");
|
let bootstrap_triples =
|
||||||
|
symbolic_schema_to_triples(&ident_map, &V1_SYMBOLIC_SCHEMA).expect("symbolic schema");
|
||||||
Schema::from_ident_map_and_triples(ident_map, bootstrap_triples).unwrap()
|
Schema::from_ident_map_and_triples(ident_map, bootstrap_triples).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn bootstrap_entities() -> Vec<Entity<edn::ValueAndSpan>> {
|
pub(crate) fn bootstrap_entities() -> Vec<Entity<edn::ValueAndSpan>> {
|
||||||
let bootstrap_assertions: Value = Value::Vector([
|
let bootstrap_assertions: Value = Value::Vector(
|
||||||
symbolic_schema_to_assertions(&V1_SYMBOLIC_SCHEMA).expect("symbolic schema"),
|
[
|
||||||
idents_to_assertions(&V1_IDENTS[..]),
|
symbolic_schema_to_assertions(&V1_SYMBOLIC_SCHEMA).expect("symbolic schema"),
|
||||||
schema_attrs_to_assertions(CORE_SCHEMA_VERSION, V1_CORE_SCHEMA.as_ref()),
|
idents_to_assertions(&V1_IDENTS[..]),
|
||||||
].concat());
|
schema_attrs_to_assertions(CORE_SCHEMA_VERSION, V1_CORE_SCHEMA.as_ref()),
|
||||||
|
]
|
||||||
|
.concat(),
|
||||||
|
);
|
||||||
|
|
||||||
// Failure here is a coding error (since the inputs are fixed), not a runtime error.
|
// Failure here is a coding error (since the inputs are fixed), not a runtime error.
|
||||||
// TODO: represent these bootstrap data errors rather than just panicing.
|
// TODO: represent these bootstrap entity data errors rather than just panicing.
|
||||||
let bootstrap_entities: Vec<Entity<edn::ValueAndSpan>> = edn::parse::entities(&bootstrap_assertions.to_string()).expect("bootstrap assertions");
|
edn::parse::entities(&bootstrap_assertions.to_string()).expect("bootstrap assertions")
|
||||||
return bootstrap_entities;
|
|
||||||
}
|
}
|
||||||
|
|
1151
db/src/cache.rs
1151
db/src/cache.rs
File diff suppressed because it is too large
Load diff
2564
db/src/db.rs
2564
db/src/db.rs
File diff suppressed because it is too large
Load diff
500
db/src/debug.rs
500
db/src/debug.rs
|
@ -9,45 +9,90 @@
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
#![allow(unused_macros)]
|
||||||
|
|
||||||
/// Low-level functions for testing.
|
/// Low-level functions for testing.
|
||||||
|
|
||||||
|
// Macro to parse a `Borrow<str>` to an `edn::Value` and assert the given `edn::Value` `matches`
|
||||||
|
// against it.
|
||||||
|
//
|
||||||
|
// This is a macro only to give nice line numbers when tests fail.
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! assert_matches {
|
||||||
|
( $input: expr, $expected: expr ) => {{
|
||||||
|
// Failure to parse the expected pattern is a coding error, so we unwrap.
|
||||||
|
let pattern_value = edn::parse::value($expected.borrow())
|
||||||
|
.expect(format!("to be able to parse expected {}", $expected).as_str())
|
||||||
|
.without_spans();
|
||||||
|
let input_value = $input.to_edn();
|
||||||
|
assert!(
|
||||||
|
input_value.matches(&pattern_value),
|
||||||
|
"Expected value:\n{}\nto match pattern:\n{}\n",
|
||||||
|
input_value.to_pretty(120).unwrap(),
|
||||||
|
pattern_value.to_pretty(120).unwrap()
|
||||||
|
);
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transact $input against the given $conn, expecting success or a `Result<TxReport, String>`.
|
||||||
|
//
|
||||||
|
// This unwraps safely and makes asserting errors pleasant.
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! assert_transact {
|
||||||
|
( $conn: expr, $input: expr, $expected: expr ) => {{
|
||||||
|
trace!("assert_transact: {}", $input);
|
||||||
|
let result = $conn.transact($input).map_err(|e| e.to_string());
|
||||||
|
assert_eq!(result, $expected.map_err(|e| e.to_string()));
|
||||||
|
}};
|
||||||
|
( $conn: expr, $input: expr ) => {{
|
||||||
|
trace!("assert_transact: {}", $input);
|
||||||
|
let result = $conn.transact($input);
|
||||||
|
assert!(
|
||||||
|
result.is_ok(),
|
||||||
|
"Expected Ok(_), got `{}`",
|
||||||
|
result.unwrap_err()
|
||||||
|
);
|
||||||
|
result.unwrap()
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::io::{Write};
|
use std::collections::BTreeMap;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use rusqlite;
|
use rusqlite;
|
||||||
use rusqlite::types::{ToSql};
|
use rusqlite::types::ToSql;
|
||||||
|
use rusqlite::TransactionBehavior;
|
||||||
use tabwriter::TabWriter;
|
use tabwriter::TabWriter;
|
||||||
|
|
||||||
use bootstrap;
|
use crate::bootstrap;
|
||||||
use db::TypedSQLValue;
|
use crate::db::*;
|
||||||
|
use crate::db::{read_attribute_map, read_ident_map};
|
||||||
|
use crate::entids;
|
||||||
|
use db_traits::errors::Result;
|
||||||
use edn;
|
use edn;
|
||||||
use entids;
|
|
||||||
use errors::Result;
|
use core_traits::{Entid, TypedValue, ValueType};
|
||||||
use mentat_core::{
|
|
||||||
HasSchema,
|
use crate::internal_types::TermWithTempIds;
|
||||||
SQLValueType,
|
use crate::schema::SchemaBuilding;
|
||||||
TypedValue,
|
use crate::tx::{transact, transact_terms};
|
||||||
ValueType,
|
use crate::types::*;
|
||||||
};
|
use crate::watcher::NullWatcher;
|
||||||
use edn::entities::{
|
use edn::entities::{EntidOrIdent, TempId};
|
||||||
Entid,
|
use edn::InternSet;
|
||||||
};
|
use mentat_core::{HasSchema, SQLValueType, TxReport};
|
||||||
use schema::{
|
|
||||||
SchemaBuilding,
|
|
||||||
};
|
|
||||||
use types::Schema;
|
|
||||||
|
|
||||||
/// Represents a *datom* (assertion) in the store.
|
/// Represents a *datom* (assertion) in the store.
|
||||||
#[derive(Clone,Debug,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
pub(crate) struct Datom {
|
pub struct Datom {
|
||||||
// TODO: generalize this.
|
// TODO: generalize this.
|
||||||
e: Entid,
|
pub e: EntidOrIdent,
|
||||||
a: Entid,
|
pub a: EntidOrIdent,
|
||||||
v: edn::Value,
|
pub v: edn::Value,
|
||||||
tx: i64,
|
pub tx: i64,
|
||||||
added: Option<bool>,
|
pub added: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents a set of datoms (assertions) in the store.
|
/// Represents a set of datoms (assertions) in the store.
|
||||||
|
@ -55,7 +100,7 @@ pub(crate) struct Datom {
|
||||||
/// To make comparision easier, we deterministically order. The ordering is the ascending tuple
|
/// To make comparision easier, we deterministically order. The ordering is the ascending tuple
|
||||||
/// ordering determined by `(e, a, (value_type_tag, v), tx)`, where `value_type_tag` is an internal
|
/// ordering determined by `(e, a, (value_type_tag, v), tx)`, where `value_type_tag` is an internal
|
||||||
/// value that is not exposed but is deterministic.
|
/// value that is not exposed but is deterministic.
|
||||||
pub(crate) struct Datoms(pub Vec<Datom>);
|
pub struct Datoms(pub Vec<Datom>);
|
||||||
|
|
||||||
/// Represents an ordered sequence of transactions in the store.
|
/// Represents an ordered sequence of transactions in the store.
|
||||||
///
|
///
|
||||||
|
@ -63,17 +108,17 @@ pub(crate) struct Datoms(pub Vec<Datom>);
|
||||||
/// ordering determined by `(e, a, (value_type_tag, v), tx, added)`, where `value_type_tag` is an
|
/// ordering determined by `(e, a, (value_type_tag, v), tx, added)`, where `value_type_tag` is an
|
||||||
/// internal value that is not exposed but is deterministic, and `added` is ordered such that
|
/// internal value that is not exposed but is deterministic, and `added` is ordered such that
|
||||||
/// retracted assertions appear before added assertions.
|
/// retracted assertions appear before added assertions.
|
||||||
pub(crate) struct Transactions(pub Vec<Datoms>);
|
pub struct Transactions(pub Vec<Datoms>);
|
||||||
|
|
||||||
/// Represents the fulltext values in the store.
|
/// Represents the fulltext values in the store.
|
||||||
pub(crate) struct FulltextValues(pub Vec<(i64, String)>);
|
pub struct FulltextValues(pub Vec<(i64, String)>);
|
||||||
|
|
||||||
impl Datom {
|
impl Datom {
|
||||||
pub(crate) fn into_edn(&self) -> edn::Value {
|
pub fn to_edn(&self) -> edn::Value {
|
||||||
let f = |entid: &Entid| -> edn::Value {
|
let f = |entid: &EntidOrIdent| -> edn::Value {
|
||||||
match *entid {
|
match *entid {
|
||||||
Entid::Entid(ref y) => edn::Value::Integer(y.clone()),
|
EntidOrIdent::Entid(ref y) => edn::Value::Integer(*y),
|
||||||
Entid::Ident(ref y) => edn::Value::Keyword(y.clone()),
|
EntidOrIdent::Ident(ref y) => edn::Value::Keyword(y.clone()),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -88,32 +133,43 @@ impl Datom {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Datoms {
|
impl Datoms {
|
||||||
pub(crate) fn into_edn(&self) -> edn::Value {
|
pub fn to_edn(&self) -> edn::Value {
|
||||||
edn::Value::Vector((&self.0).into_iter().map(|x| x.into_edn()).collect())
|
edn::Value::Vector((&self.0).iter().map(|x| x.to_edn()).collect())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Transactions {
|
impl Transactions {
|
||||||
pub(crate) fn into_edn(&self) -> edn::Value {
|
pub fn to_edn(&self) -> edn::Value {
|
||||||
edn::Value::Vector((&self.0).into_iter().map(|x| x.into_edn()).collect())
|
edn::Value::Vector((&self.0).iter().map(|x| x.to_edn()).collect())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FulltextValues {
|
impl FulltextValues {
|
||||||
pub(crate) fn into_edn(&self) -> edn::Value {
|
pub fn to_edn(&self) -> edn::Value {
|
||||||
edn::Value::Vector((&self.0).into_iter().map(|&(x, ref y)| edn::Value::Vector(vec![edn::Value::Integer(x), edn::Value::Text(y.clone())])).collect())
|
edn::Value::Vector(
|
||||||
|
(&self.0)
|
||||||
|
.iter()
|
||||||
|
.map(|&(x, ref y)| {
|
||||||
|
edn::Value::Vector(vec![edn::Value::Integer(x), edn::Value::Text(y.clone())])
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Turn TypedValue::Ref into TypedValue::Keyword when it is possible.
|
/// Turn TypedValue::Ref into TypedValue::Keyword when it is possible.
|
||||||
trait ToIdent {
|
trait ToIdent {
|
||||||
fn map_ident(self, schema: &Schema) -> Self;
|
fn map_ident(self, schema: &Schema) -> Self;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToIdent for TypedValue {
|
impl ToIdent for TypedValue {
|
||||||
fn map_ident(self, schema: &Schema) -> Self {
|
fn map_ident(self, schema: &Schema) -> Self {
|
||||||
if let TypedValue::Ref(e) = self {
|
if let TypedValue::Ref(e) = self {
|
||||||
schema.get_ident(e).cloned().map(|i| i.into()).unwrap_or(TypedValue::Ref(e))
|
schema
|
||||||
|
.get_ident(e)
|
||||||
|
.cloned()
|
||||||
|
.map(|i| i.into())
|
||||||
|
.unwrap_or(TypedValue::Ref(e))
|
||||||
} else {
|
} else {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
@ -121,13 +177,22 @@ impl ToIdent for TypedValue {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert a numeric entid to an ident `Entid` if possible, otherwise a numeric `Entid`.
|
/// Convert a numeric entid to an ident `Entid` if possible, otherwise a numeric `Entid`.
|
||||||
fn to_entid(schema: &Schema, entid: i64) -> Entid {
|
pub fn to_entid(schema: &Schema, entid: i64) -> EntidOrIdent {
|
||||||
schema.get_ident(entid).map_or(Entid::Entid(entid), |ident| Entid::Ident(ident.clone()))
|
schema
|
||||||
|
.get_ident(entid)
|
||||||
|
.map_or(EntidOrIdent::Entid(entid), |ident| {
|
||||||
|
EntidOrIdent::Ident(ident.clone())
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /// Convert a symbolic ident to an ident `Entid` if possible, otherwise a numeric `Entid`.
|
||||||
|
// pub fn to_ident(schema: &Schema, entid: i64) -> Entid {
|
||||||
|
// schema.get_ident(entid).map_or(Entid::Entid(entid), |ident| Entid::Ident(ident.clone()))
|
||||||
|
// }
|
||||||
|
|
||||||
/// Return the set of datoms in the store, ordered by (e, a, v, tx), but not including any datoms of
|
/// Return the set of datoms in the store, ordered by (e, a, v, tx), but not including any datoms of
|
||||||
/// the form [... :db/txInstant ...].
|
/// the form [... :db/txInstant ...].
|
||||||
pub(crate) fn datoms<S: Borrow<Schema>>(conn: &rusqlite::Connection, schema: &S) -> Result<Datoms> {
|
pub fn datoms<S: Borrow<Schema>>(conn: &rusqlite::Connection, schema: &S) -> Result<Datoms> {
|
||||||
datoms_after(conn, schema, bootstrap::TX0 - 1)
|
datoms_after(conn, schema, bootstrap::TX0 - 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,38 +200,49 @@ pub(crate) fn datoms<S: Borrow<Schema>>(conn: &rusqlite::Connection, schema: &S)
|
||||||
/// ordered by (e, a, v, tx).
|
/// ordered by (e, a, v, tx).
|
||||||
///
|
///
|
||||||
/// The datom set returned does not include any datoms of the form [... :db/txInstant ...].
|
/// The datom set returned does not include any datoms of the form [... :db/txInstant ...].
|
||||||
pub(crate) fn datoms_after<S: Borrow<Schema>>(conn: &rusqlite::Connection, schema: &S, tx: i64) -> Result<Datoms> {
|
pub fn datoms_after<S: Borrow<Schema>>(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
schema: &S,
|
||||||
|
tx: i64,
|
||||||
|
) -> Result<Datoms> {
|
||||||
let borrowed_schema = schema.borrow();
|
let borrowed_schema = schema.borrow();
|
||||||
|
|
||||||
let mut stmt: rusqlite::Statement = conn.prepare("SELECT e, a, v, value_type_tag, tx FROM datoms WHERE tx > ? ORDER BY e ASC, a ASC, value_type_tag ASC, v ASC, tx ASC")?;
|
let mut stmt: rusqlite::Statement = conn.prepare("SELECT e, a, v, value_type_tag, tx FROM datoms WHERE tx > ? ORDER BY e ASC, a ASC, value_type_tag ASC, v ASC, tx ASC")?;
|
||||||
|
|
||||||
let r: Result<Vec<_>> = stmt.query_and_then(&[&tx], |row| {
|
let r: Result<Vec<_>> = stmt
|
||||||
let e: i64 = row.get_checked(0)?;
|
.query_and_then(&[&tx], |row| {
|
||||||
let a: i64 = row.get_checked(1)?;
|
let e: i64 = row.get(0)?;
|
||||||
|
let a: i64 = row.get(1)?;
|
||||||
|
|
||||||
if a == entids::DB_TX_INSTANT {
|
if a == entids::DB_TX_INSTANT {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
let v: rusqlite::types::Value = row.get_checked(2)?;
|
let v: rusqlite::types::Value = row.get(2)?;
|
||||||
let value_type_tag: i32 = row.get_checked(3)?;
|
let value_type_tag: i32 = row.get(3)?;
|
||||||
|
|
||||||
let attribute = borrowed_schema.require_attribute_for_entid(a)?;
|
let attribute = borrowed_schema.require_attribute_for_entid(a)?;
|
||||||
let value_type_tag = if !attribute.fulltext { value_type_tag } else { ValueType::Long.value_type_tag() };
|
let value_type_tag = if !attribute.fulltext {
|
||||||
|
value_type_tag
|
||||||
|
} else {
|
||||||
|
ValueType::Long.value_type_tag()
|
||||||
|
};
|
||||||
|
|
||||||
let typed_value = TypedValue::from_sql_value_pair(v, value_type_tag)?.map_ident(borrowed_schema);
|
let typed_value =
|
||||||
let (value, _) = typed_value.to_edn_value_pair();
|
TypedValue::from_sql_value_pair(v, value_type_tag)?.map_ident(borrowed_schema);
|
||||||
|
let (value, _) = typed_value.to_edn_value_pair();
|
||||||
|
|
||||||
let tx: i64 = row.get_checked(4)?;
|
let tx: i64 = row.get(4)?;
|
||||||
|
|
||||||
Ok(Some(Datom {
|
Ok(Some(Datom {
|
||||||
e: Entid::Entid(e),
|
e: EntidOrIdent::Entid(e),
|
||||||
a: to_entid(borrowed_schema, a),
|
a: to_entid(borrowed_schema, a),
|
||||||
v: value,
|
v: value,
|
||||||
tx: tx,
|
tx,
|
||||||
added: None,
|
added: None,
|
||||||
}))
|
}))
|
||||||
})?.collect();
|
})?
|
||||||
|
.collect();
|
||||||
|
|
||||||
Ok(Datoms(r?.into_iter().filter_map(|x| x).collect()))
|
Ok(Datoms(r?.into_iter().filter_map(|x| x).collect()))
|
||||||
}
|
}
|
||||||
|
@ -175,50 +251,69 @@ pub(crate) fn datoms_after<S: Borrow<Schema>>(conn: &rusqlite::Connection, schem
|
||||||
/// given `tx`, ordered by (tx, e, a, v).
|
/// given `tx`, ordered by (tx, e, a, v).
|
||||||
///
|
///
|
||||||
/// Each transaction returned includes the [(transaction-tx) :db/txInstant ...] datom.
|
/// Each transaction returned includes the [(transaction-tx) :db/txInstant ...] datom.
|
||||||
pub(crate) fn transactions_after<S: Borrow<Schema>>(conn: &rusqlite::Connection, schema: &S, tx: i64) -> Result<Transactions> {
|
pub fn transactions_after<S: Borrow<Schema>>(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
schema: &S,
|
||||||
|
tx: i64,
|
||||||
|
) -> Result<Transactions> {
|
||||||
let borrowed_schema = schema.borrow();
|
let borrowed_schema = schema.borrow();
|
||||||
|
|
||||||
let mut stmt: rusqlite::Statement = conn.prepare("SELECT e, a, v, value_type_tag, tx, added FROM transactions WHERE tx > ? ORDER BY tx ASC, e ASC, a ASC, value_type_tag ASC, v ASC, added ASC")?;
|
let mut stmt: rusqlite::Statement = conn.prepare("SELECT e, a, v, value_type_tag, tx, added FROM transactions WHERE tx > ? ORDER BY tx ASC, e ASC, a ASC, value_type_tag ASC, v ASC, added ASC")?;
|
||||||
|
|
||||||
let r: Result<Vec<_>> = stmt.query_and_then(&[&tx], |row| {
|
let r: Result<Vec<_>> = stmt
|
||||||
let e: i64 = row.get_checked(0)?;
|
.query_and_then(&[&tx], |row| {
|
||||||
let a: i64 = row.get_checked(1)?;
|
let e: i64 = row.get(0)?;
|
||||||
|
let a: i64 = row.get(1)?;
|
||||||
|
|
||||||
let v: rusqlite::types::Value = row.get_checked(2)?;
|
let v: rusqlite::types::Value = row.get(2)?;
|
||||||
let value_type_tag: i32 = row.get_checked(3)?;
|
let value_type_tag: i32 = row.get(3)?;
|
||||||
|
|
||||||
let attribute = borrowed_schema.require_attribute_for_entid(a)?;
|
let attribute = borrowed_schema.require_attribute_for_entid(a)?;
|
||||||
let value_type_tag = if !attribute.fulltext { value_type_tag } else { ValueType::Long.value_type_tag() };
|
let value_type_tag = if !attribute.fulltext {
|
||||||
|
value_type_tag
|
||||||
|
} else {
|
||||||
|
ValueType::Long.value_type_tag()
|
||||||
|
};
|
||||||
|
|
||||||
let typed_value = TypedValue::from_sql_value_pair(v, value_type_tag)?.map_ident(borrowed_schema);
|
let typed_value =
|
||||||
let (value, _) = typed_value.to_edn_value_pair();
|
TypedValue::from_sql_value_pair(v, value_type_tag)?.map_ident(borrowed_schema);
|
||||||
|
let (value, _) = typed_value.to_edn_value_pair();
|
||||||
|
|
||||||
let tx: i64 = row.get_checked(4)?;
|
let tx: i64 = row.get(4)?;
|
||||||
let added: bool = row.get_checked(5)?;
|
let added: bool = row.get(5)?;
|
||||||
|
|
||||||
Ok(Datom {
|
Ok(Datom {
|
||||||
e: Entid::Entid(e),
|
e: EntidOrIdent::Entid(e),
|
||||||
a: to_entid(borrowed_schema, a),
|
a: to_entid(borrowed_schema, a),
|
||||||
v: value,
|
v: value,
|
||||||
tx: tx,
|
tx,
|
||||||
added: Some(added),
|
added: Some(added),
|
||||||
})
|
})
|
||||||
})?.collect();
|
})?
|
||||||
|
.collect();
|
||||||
|
|
||||||
// Group by tx.
|
// Group by tx.
|
||||||
let r: Vec<Datoms> = r?.into_iter().group_by(|x| x.tx).into_iter().map(|(_key, group)| Datoms(group.collect())).collect();
|
let r: Vec<Datoms> = r?
|
||||||
|
.into_iter()
|
||||||
|
.group_by(|x| x.tx)
|
||||||
|
.into_iter()
|
||||||
|
.map(|(_key, group)| Datoms(group.collect()))
|
||||||
|
.collect();
|
||||||
Ok(Transactions(r))
|
Ok(Transactions(r))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the set of fulltext values in the store, ordered by rowid.
|
/// Return the set of fulltext values in the store, ordered by rowid.
|
||||||
pub(crate) fn fulltext_values(conn: &rusqlite::Connection) -> Result<FulltextValues> {
|
pub fn fulltext_values(conn: &rusqlite::Connection) -> Result<FulltextValues> {
|
||||||
let mut stmt: rusqlite::Statement = conn.prepare("SELECT rowid, text FROM fulltext_values ORDER BY rowid")?;
|
let mut stmt: rusqlite::Statement =
|
||||||
|
conn.prepare("SELECT rowid, text FROM fulltext_values ORDER BY rowid")?;
|
||||||
|
|
||||||
let r: Result<Vec<_>> = stmt.query_and_then(&[], |row| {
|
let r: Result<Vec<_>> = stmt
|
||||||
let rowid: i64 = row.get_checked(0)?;
|
.query_and_then([], |row| {
|
||||||
let text: String = row.get_checked(1)?;
|
let rowid: i64 = row.get(0)?;
|
||||||
Ok((rowid, text))
|
let text: String = row.get(1)?;
|
||||||
})?.collect();
|
Ok((rowid, text))
|
||||||
|
})?
|
||||||
|
.collect();
|
||||||
|
|
||||||
r.map(FulltextValues)
|
r.map(FulltextValues)
|
||||||
}
|
}
|
||||||
|
@ -228,27 +323,222 @@ pub(crate) fn fulltext_values(conn: &rusqlite::Connection) -> Result<FulltextVal
|
||||||
///
|
///
|
||||||
/// The query is printed followed by a newline, then the returned columns followed by a newline, and
|
/// The query is printed followed by a newline, then the returned columns followed by a newline, and
|
||||||
/// then the data rows and columns. All columns are aligned.
|
/// then the data rows and columns. All columns are aligned.
|
||||||
pub(crate) fn dump_sql_query(conn: &rusqlite::Connection, sql: &str, params: &[&ToSql]) -> Result<String> {
|
pub fn dump_sql_query(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
sql: &str,
|
||||||
|
params: &[&dyn ToSql],
|
||||||
|
) -> Result<String> {
|
||||||
let mut stmt: rusqlite::Statement = conn.prepare(sql)?;
|
let mut stmt: rusqlite::Statement = conn.prepare(sql)?;
|
||||||
|
|
||||||
let mut tw = TabWriter::new(Vec::new()).padding(2);
|
let mut tw = TabWriter::new(Vec::new()).padding(2);
|
||||||
write!(&mut tw, "{}\n", sql).unwrap();
|
writeln!(&mut tw, "{}", sql).unwrap();
|
||||||
|
|
||||||
for column_name in stmt.column_names() {
|
for column_name in stmt.column_names() {
|
||||||
write!(&mut tw, "{}\t", column_name).unwrap();
|
write!(&mut tw, "{}\t", column_name).unwrap();
|
||||||
}
|
}
|
||||||
write!(&mut tw, "\n").unwrap();
|
writeln!(&mut tw).unwrap();
|
||||||
|
|
||||||
let r: Result<Vec<_>> = stmt.query_and_then(params, |row| {
|
let r: Result<Vec<_>> = stmt
|
||||||
for i in 0..row.column_count() {
|
.query_and_then(params, |row| {
|
||||||
let value: rusqlite::types::Value = row.get_checked(i)?;
|
for i in 0..row.as_ref().column_count() {
|
||||||
write!(&mut tw, "{:?}\t", value).unwrap();
|
let value: rusqlite::types::Value = row.get(i)?;
|
||||||
}
|
write!(&mut tw, "{:?}\t", value).unwrap();
|
||||||
write!(&mut tw, "\n").unwrap();
|
}
|
||||||
Ok(())
|
writeln!(&mut tw).unwrap();
|
||||||
})?.collect();
|
Ok(())
|
||||||
|
})?
|
||||||
|
.collect();
|
||||||
r?;
|
r?;
|
||||||
|
|
||||||
let dump = String::from_utf8(tw.into_inner().unwrap()).unwrap();
|
let dump = String::from_utf8(tw.into_inner().unwrap()).unwrap();
|
||||||
Ok(dump)
|
Ok(dump)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A connection that doesn't try to be clever about possibly sharing its `Schema`. Compare to
|
||||||
|
// `mentat::Conn`.
|
||||||
|
pub struct TestConn {
|
||||||
|
pub sqlite: rusqlite::Connection,
|
||||||
|
pub partition_map: PartitionMap,
|
||||||
|
pub schema: Schema,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TestConn {
|
||||||
|
fn assert_materialized_views(&self) {
|
||||||
|
let materialized_ident_map = read_ident_map(&self.sqlite).expect("ident map");
|
||||||
|
let materialized_attribute_map = read_attribute_map(&self.sqlite).expect("schema map");
|
||||||
|
|
||||||
|
let materialized_schema = Schema::from_ident_map_and_attribute_map(
|
||||||
|
materialized_ident_map,
|
||||||
|
materialized_attribute_map,
|
||||||
|
)
|
||||||
|
.expect("schema");
|
||||||
|
assert_eq!(materialized_schema, self.schema);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn transact<I>(&mut self, transaction: I) -> Result<TxReport>
|
||||||
|
where
|
||||||
|
I: Borrow<str>,
|
||||||
|
{
|
||||||
|
// Failure to parse the transaction is a coding error, so we unwrap.
|
||||||
|
let entities = edn::parse::entities(transaction.borrow()).unwrap_or_else(|_| {
|
||||||
|
panic!("to be able to parse {} into entities", transaction.borrow())
|
||||||
|
});
|
||||||
|
|
||||||
|
let details = {
|
||||||
|
// The block scopes the borrow of self.sqlite.
|
||||||
|
// We're about to write, so go straight ahead and get an IMMEDIATE transaction.
|
||||||
|
let tx = self
|
||||||
|
.sqlite
|
||||||
|
.transaction_with_behavior(TransactionBehavior::Immediate)?;
|
||||||
|
// Applying the transaction can fail, so we don't unwrap.
|
||||||
|
let details = transact(
|
||||||
|
&tx,
|
||||||
|
self.partition_map.clone(),
|
||||||
|
&self.schema,
|
||||||
|
&self.schema,
|
||||||
|
NullWatcher(),
|
||||||
|
entities,
|
||||||
|
)?;
|
||||||
|
tx.commit()?;
|
||||||
|
details
|
||||||
|
};
|
||||||
|
|
||||||
|
let (report, next_partition_map, next_schema, _watcher) = details;
|
||||||
|
self.partition_map = next_partition_map;
|
||||||
|
if let Some(next_schema) = next_schema {
|
||||||
|
self.schema = next_schema;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that we've updated the materialized views during transacting.
|
||||||
|
self.assert_materialized_views();
|
||||||
|
|
||||||
|
Ok(report)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn transact_simple_terms<I>(
|
||||||
|
&mut self,
|
||||||
|
terms: I,
|
||||||
|
tempid_set: InternSet<TempId>,
|
||||||
|
) -> Result<TxReport>
|
||||||
|
where
|
||||||
|
I: IntoIterator<Item = TermWithTempIds>,
|
||||||
|
{
|
||||||
|
let details = {
|
||||||
|
// The block scopes the borrow of self.sqlite.
|
||||||
|
// We're about to write, so go straight ahead and get an IMMEDIATE transaction.
|
||||||
|
let tx = self
|
||||||
|
.sqlite
|
||||||
|
.transaction_with_behavior(TransactionBehavior::Immediate)?;
|
||||||
|
// Applying the transaction can fail, so we don't unwrap.
|
||||||
|
let details = transact_terms(
|
||||||
|
&tx,
|
||||||
|
self.partition_map.clone(),
|
||||||
|
&self.schema,
|
||||||
|
&self.schema,
|
||||||
|
NullWatcher(),
|
||||||
|
terms,
|
||||||
|
tempid_set,
|
||||||
|
)?;
|
||||||
|
tx.commit()?;
|
||||||
|
details
|
||||||
|
};
|
||||||
|
|
||||||
|
let (report, next_partition_map, next_schema, _watcher) = details;
|
||||||
|
self.partition_map = next_partition_map;
|
||||||
|
if let Some(next_schema) = next_schema {
|
||||||
|
self.schema = next_schema;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that we've updated the materialized views during transacting.
|
||||||
|
self.assert_materialized_views();
|
||||||
|
|
||||||
|
Ok(report)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn last_tx_id(&self) -> Entid {
|
||||||
|
self.partition_map
|
||||||
|
.get(&":db.part/tx".to_string())
|
||||||
|
.unwrap()
|
||||||
|
.next_entid()
|
||||||
|
- 1
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn last_transaction(&self) -> Datoms {
|
||||||
|
transactions_after(&self.sqlite, &self.schema, self.last_tx_id() - 1)
|
||||||
|
.expect("last_transaction")
|
||||||
|
.0
|
||||||
|
.pop()
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn transactions(&self) -> Transactions {
|
||||||
|
transactions_after(&self.sqlite, &self.schema, bootstrap::TX0).expect("transactions")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn datoms(&self) -> Datoms {
|
||||||
|
datoms_after(&self.sqlite, &self.schema, bootstrap::TX0).expect("datoms")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fulltext_values(&self) -> FulltextValues {
|
||||||
|
fulltext_values(&self.sqlite).expect("fulltext_values")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_sqlite(mut conn: rusqlite::Connection) -> TestConn {
|
||||||
|
let db = ensure_current_version(&mut conn).unwrap();
|
||||||
|
|
||||||
|
// Does not include :db/txInstant.
|
||||||
|
let datoms = datoms_after(&conn, &db.schema, 0).unwrap();
|
||||||
|
assert_eq!(datoms.0.len(), 94);
|
||||||
|
|
||||||
|
// Includes :db/txInstant.
|
||||||
|
let transactions = transactions_after(&conn, &db.schema, 0).unwrap();
|
||||||
|
assert_eq!(transactions.0.len(), 1);
|
||||||
|
assert_eq!(transactions.0[0].0.len(), 95);
|
||||||
|
|
||||||
|
let mut parts = db.partition_map;
|
||||||
|
|
||||||
|
// Add a fake partition to allow tests to do things like
|
||||||
|
// [:db/add 111 :foo/bar 222]
|
||||||
|
{
|
||||||
|
let fake_partition = Partition::new(100, 2000, 1000, true);
|
||||||
|
parts.insert(":db.part/fake".into(), fake_partition);
|
||||||
|
}
|
||||||
|
|
||||||
|
let test_conn = TestConn {
|
||||||
|
sqlite: conn,
|
||||||
|
partition_map: parts,
|
||||||
|
schema: db.schema,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Verify that we've created the materialized views during bootstrapping.
|
||||||
|
test_conn.assert_materialized_views();
|
||||||
|
|
||||||
|
test_conn
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sanitized_partition_map(&mut self) {
|
||||||
|
self.partition_map.remove(":db.part/fake");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for TestConn {
|
||||||
|
fn default() -> TestConn {
|
||||||
|
TestConn::with_sqlite(new_connection("").expect("Couldn't open in-memory db"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct TempIds(edn::Value);
|
||||||
|
|
||||||
|
impl TempIds {
|
||||||
|
pub fn to_edn(&self) -> edn::Value {
|
||||||
|
self.0.clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn tempids(report: &TxReport) -> TempIds {
|
||||||
|
let mut map: BTreeMap<edn::Value, edn::Value> = BTreeMap::default();
|
||||||
|
for (tempid, &entid) in report.tempids.iter() {
|
||||||
|
map.insert(edn::Value::Text(tempid.clone()), edn::Value::Integer(entid));
|
||||||
|
}
|
||||||
|
TempIds(edn::Value::Map(map))
|
||||||
|
}
|
||||||
|
|
|
@ -13,8 +13,7 @@
|
||||||
/// Literal `Entid` values in the the "db" namespace.
|
/// Literal `Entid` values in the the "db" namespace.
|
||||||
///
|
///
|
||||||
/// Used through-out the transactor to match core DB constructs.
|
/// Used through-out the transactor to match core DB constructs.
|
||||||
|
use core_traits::Entid;
|
||||||
use types::{Entid};
|
|
||||||
|
|
||||||
// Added in SQL schema v1.
|
// Added in SQL schema v1.
|
||||||
pub const DB_IDENT: Entid = 1;
|
pub const DB_IDENT: Entid = 1;
|
||||||
|
@ -61,23 +60,35 @@ pub const DB_SCHEMA_CORE: Entid = 40;
|
||||||
/// Return `false` if the given attribute will not change the metadata: recognized idents, schema,
|
/// Return `false` if the given attribute will not change the metadata: recognized idents, schema,
|
||||||
/// partitions in the partition map.
|
/// partitions in the partition map.
|
||||||
pub fn might_update_metadata(attribute: Entid) -> bool {
|
pub fn might_update_metadata(attribute: Entid) -> bool {
|
||||||
if attribute > DB_DOC {
|
if attribute >= DB_DOC {
|
||||||
return false
|
return false;
|
||||||
}
|
}
|
||||||
match attribute {
|
matches!(
|
||||||
|
attribute,
|
||||||
// Idents.
|
// Idents.
|
||||||
DB_IDENT |
|
DB_IDENT |
|
||||||
// Schema.
|
// Schema.
|
||||||
DB_CARDINALITY |
|
DB_CARDINALITY |
|
||||||
DB_DOC |
|
|
||||||
DB_FULLTEXT |
|
DB_FULLTEXT |
|
||||||
DB_INDEX |
|
DB_INDEX |
|
||||||
DB_IS_COMPONENT |
|
DB_IS_COMPONENT |
|
||||||
DB_UNIQUE |
|
DB_UNIQUE |
|
||||||
DB_VALUE_TYPE =>
|
DB_VALUE_TYPE
|
||||||
true,
|
)
|
||||||
_ => false,
|
}
|
||||||
}
|
|
||||||
|
/// Return 'false' if the given attribute might be used to describe a schema attribute.
|
||||||
|
pub fn is_a_schema_attribute(attribute: Entid) -> bool {
|
||||||
|
matches!(
|
||||||
|
attribute,
|
||||||
|
DB_IDENT
|
||||||
|
| DB_CARDINALITY
|
||||||
|
| DB_FULLTEXT
|
||||||
|
| DB_INDEX
|
||||||
|
| DB_IS_COMPONENT
|
||||||
|
| DB_UNIQUE
|
||||||
|
| DB_VALUE_TYPE
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
|
@ -89,9 +100,8 @@ lazy_static! {
|
||||||
|
|
||||||
/// Attributes that are "schema related". These might change the "schema" materialized view.
|
/// Attributes that are "schema related". These might change the "schema" materialized view.
|
||||||
pub static ref SCHEMA_SQL_LIST: String = {
|
pub static ref SCHEMA_SQL_LIST: String = {
|
||||||
format!("({}, {}, {}, {}, {}, {}, {})",
|
format!("({}, {}, {}, {}, {}, {})",
|
||||||
DB_CARDINALITY,
|
DB_CARDINALITY,
|
||||||
DB_DOC,
|
|
||||||
DB_FULLTEXT,
|
DB_FULLTEXT,
|
||||||
DB_INDEX,
|
DB_INDEX,
|
||||||
DB_IS_COMPONENT,
|
DB_IS_COMPONENT,
|
||||||
|
@ -101,9 +111,8 @@ lazy_static! {
|
||||||
|
|
||||||
/// Attributes that are "metadata" related. These might change one of the materialized views.
|
/// Attributes that are "metadata" related. These might change one of the materialized views.
|
||||||
pub static ref METADATA_SQL_LIST: String = {
|
pub static ref METADATA_SQL_LIST: String = {
|
||||||
format!("({}, {}, {}, {}, {}, {}, {}, {})",
|
format!("({}, {}, {}, {}, {}, {}, {})",
|
||||||
DB_CARDINALITY,
|
DB_CARDINALITY,
|
||||||
DB_DOC,
|
|
||||||
DB_FULLTEXT,
|
DB_FULLTEXT,
|
||||||
DB_IDENT,
|
DB_IDENT,
|
||||||
DB_INDEX,
|
DB_INDEX,
|
||||||
|
|
|
@ -12,48 +12,21 @@
|
||||||
|
|
||||||
//! Types used only within the transactor. These should not be exposed outside of this crate.
|
//! Types used only within the transactor. These should not be exposed outside of this crate.
|
||||||
|
|
||||||
use std::collections::{
|
use std::collections::{BTreeMap, BTreeSet, HashMap};
|
||||||
BTreeMap,
|
|
||||||
BTreeSet,
|
|
||||||
HashMap,
|
|
||||||
};
|
|
||||||
use std::rc::Rc;
|
|
||||||
|
|
||||||
use mentat_core::KnownEntid;
|
use core_traits::{Attribute, Entid, KnownEntid, TypedValue, ValueType};
|
||||||
|
|
||||||
use mentat_core::util::Either;
|
use mentat_core::util::Either;
|
||||||
|
|
||||||
use edn;
|
use edn;
|
||||||
use edn::{
|
|
||||||
SpannedValue,
|
|
||||||
ValueAndSpan,
|
|
||||||
};
|
|
||||||
|
|
||||||
use errors;
|
|
||||||
use errors::{
|
|
||||||
DbError,
|
|
||||||
Result,
|
|
||||||
};
|
|
||||||
use schema::{
|
|
||||||
SchemaTypeChecking,
|
|
||||||
};
|
|
||||||
use types::{
|
|
||||||
Attribute,
|
|
||||||
AVMap,
|
|
||||||
AVPair,
|
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
TransactableValue,
|
|
||||||
TypedValue,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
use edn::entities;
|
use edn::entities;
|
||||||
use edn::entities::{
|
use edn::entities::{EntityPlace, OpType, TempId, TxFunction};
|
||||||
EntityPlace,
|
use edn::{SpannedValue, ValueAndSpan, ValueRc};
|
||||||
OpType,
|
|
||||||
TempId,
|
use crate::schema::SchemaTypeChecking;
|
||||||
TxFunction,
|
use crate::types::{AVMap, AVPair, Schema, TransactableValue};
|
||||||
};
|
use db_traits::errors;
|
||||||
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
|
|
||||||
impl TransactableValue for ValueAndSpan {
|
impl TransactableValue for ValueAndSpan {
|
||||||
fn into_typed_value(self, schema: &Schema, value_type: ValueType) -> Result<TypedValue> {
|
fn into_typed_value(self, schema: &Schema, value_type: ValueType) -> Result<TypedValue> {
|
||||||
|
@ -63,46 +36,48 @@ impl TransactableValue for ValueAndSpan {
|
||||||
fn into_entity_place(self) -> Result<EntityPlace<Self>> {
|
fn into_entity_place(self) -> Result<EntityPlace<Self>> {
|
||||||
use self::SpannedValue::*;
|
use self::SpannedValue::*;
|
||||||
match self.inner {
|
match self.inner {
|
||||||
Integer(v) => Ok(EntityPlace::Entid(entities::Entid::Entid(v))),
|
Integer(v) => Ok(EntityPlace::Entid(entities::EntidOrIdent::Entid(v))),
|
||||||
Keyword(v) => {
|
Keyword(v) => {
|
||||||
if v.is_namespaced() {
|
if v.is_namespaced() {
|
||||||
Ok(EntityPlace::Entid(entities::Entid::Ident(v)))
|
Ok(EntityPlace::Entid(entities::EntidOrIdent::Ident(v)))
|
||||||
} else {
|
} else {
|
||||||
// We only allow namespaced idents.
|
// We only allow namespaced idents.
|
||||||
bail!(DbError::InputError(errors::InputError::BadEntityPlace))
|
bail!(DbErrorKind::InputError(errors::InputError::BadEntityPlace))
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Text(v) => Ok(EntityPlace::TempId(TempId::External(v))),
|
Text(v) => Ok(EntityPlace::TempId(TempId::External(v).into())),
|
||||||
List(ls) => {
|
List(ls) => {
|
||||||
let mut it = ls.iter();
|
let mut it = ls.iter();
|
||||||
match (it.next().map(|x| &x.inner), it.next(), it.next(), it.next()) {
|
match (it.next().map(|x| &x.inner), it.next(), it.next(), it.next()) {
|
||||||
// Like "(transaction-id)".
|
// Like "(transaction-id)".
|
||||||
(Some(&PlainSymbol(ref op)), None, None, None) => {
|
(Some(&PlainSymbol(ref op)), None, None, None) => {
|
||||||
Ok(EntityPlace::TxFunction(TxFunction { op: op.clone() }))
|
Ok(EntityPlace::TxFunction(TxFunction { op: op.clone() }))
|
||||||
},
|
}
|
||||||
// Like "(lookup-ref)".
|
// Like "(lookup-ref)".
|
||||||
(Some(&PlainSymbol(edn::PlainSymbol(ref s))), Some(a), Some(v), None) if s == "lookup-ref" => {
|
(Some(&PlainSymbol(edn::PlainSymbol(ref s))), Some(a), Some(v), None)
|
||||||
|
if s == "lookup-ref" =>
|
||||||
|
{
|
||||||
match a.clone().into_entity_place()? {
|
match a.clone().into_entity_place()? {
|
||||||
EntityPlace::Entid(a) => Ok(EntityPlace::LookupRef(entities::LookupRef { a: entities::AttributePlace::Entid(a), v: v.clone() })),
|
EntityPlace::Entid(a) => {
|
||||||
EntityPlace::TempId(_) |
|
Ok(EntityPlace::LookupRef(entities::LookupRef {
|
||||||
EntityPlace::TxFunction(_) |
|
a: entities::AttributePlace::Entid(a),
|
||||||
EntityPlace::LookupRef(_) => bail!(DbError::InputError(errors::InputError::BadEntityPlace)),
|
v: v.clone(),
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
EntityPlace::TempId(_)
|
||||||
|
| EntityPlace::TxFunction(_)
|
||||||
|
| EntityPlace::LookupRef(_) => {
|
||||||
|
bail!(DbErrorKind::InputError(errors::InputError::BadEntityPlace))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => bail!(DbError::InputError(errors::InputError::BadEntityPlace)),
|
_ => bail!(DbErrorKind::InputError(errors::InputError::BadEntityPlace)),
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Nil |
|
Nil | Boolean(_) | Instant(_) | BigInteger(_) | Float(_) | Uuid(_) | PlainSymbol(_)
|
||||||
Boolean(_) |
|
| NamespacedSymbol(_) | Vector(_) | Set(_) | Map(_) | Bytes(_) => {
|
||||||
Instant(_) |
|
bail!(DbErrorKind::InputError(errors::InputError::BadEntityPlace))
|
||||||
BigInteger(_) |
|
}
|
||||||
Float(_) |
|
|
||||||
Uuid(_) |
|
|
||||||
PlainSymbol(_) |
|
|
||||||
NamespacedSymbol(_) |
|
|
||||||
Vector(_) |
|
|
||||||
Set(_) |
|
|
||||||
Map(_) => bail!(DbError::InputError(errors::InputError::BadEntityPlace)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,27 +89,32 @@ impl TransactableValue for ValueAndSpan {
|
||||||
impl TransactableValue for TypedValue {
|
impl TransactableValue for TypedValue {
|
||||||
fn into_typed_value(self, _schema: &Schema, value_type: ValueType) -> Result<TypedValue> {
|
fn into_typed_value(self, _schema: &Schema, value_type: ValueType) -> Result<TypedValue> {
|
||||||
if self.value_type() != value_type {
|
if self.value_type() != value_type {
|
||||||
bail!(DbError::BadValuePair(format!("{:?}", self), value_type));
|
bail!(DbErrorKind::BadValuePair(format!("{:?}", self), value_type));
|
||||||
}
|
}
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn into_entity_place(self) -> Result<EntityPlace<Self>> {
|
fn into_entity_place(self) -> Result<EntityPlace<Self>> {
|
||||||
match self {
|
match self {
|
||||||
TypedValue::Ref(x) => Ok(EntityPlace::Entid(entities::Entid::Entid(x))),
|
TypedValue::Ref(x) => Ok(EntityPlace::Entid(entities::EntidOrIdent::Entid(x))),
|
||||||
TypedValue::Keyword(x) => Ok(EntityPlace::Entid(entities::Entid::Ident((*x).clone()))),
|
TypedValue::Keyword(x) => Ok(EntityPlace::Entid(entities::EntidOrIdent::Ident(
|
||||||
TypedValue::String(x) => Ok(EntityPlace::TempId(TempId::External((*x).clone()))),
|
(*x).clone(),
|
||||||
TypedValue::Boolean(_) |
|
))),
|
||||||
TypedValue::Long(_) |
|
TypedValue::String(x) => Ok(EntityPlace::TempId(TempId::External((*x).clone()).into())),
|
||||||
TypedValue::Double(_) |
|
TypedValue::Boolean(_)
|
||||||
TypedValue::Instant(_) |
|
| TypedValue::Long(_)
|
||||||
TypedValue::Uuid(_) => bail!(DbError::InputError(errors::InputError::BadEntityPlace)),
|
| TypedValue::Double(_)
|
||||||
|
| TypedValue::Instant(_)
|
||||||
|
| TypedValue::Uuid(_)
|
||||||
|
| TypedValue::Bytes(_) => {
|
||||||
|
bail!(DbErrorKind::InputError(errors::InputError::BadEntityPlace))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_tempid(&self) -> Option<TempId> {
|
fn as_tempid(&self) -> Option<TempId> {
|
||||||
match self {
|
match self {
|
||||||
&TypedValue::String(ref s) => Some(TempId::External((**s).clone())),
|
TypedValue::String(ref s) => Some(TempId::External((**s).clone())),
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,21 +130,22 @@ use self::Either::*;
|
||||||
pub type KnownEntidOr<T> = Either<KnownEntid, T>;
|
pub type KnownEntidOr<T> = Either<KnownEntid, T>;
|
||||||
pub type TypedValueOr<T> = Either<TypedValue, T>;
|
pub type TypedValueOr<T> = Either<TypedValue, T>;
|
||||||
|
|
||||||
pub type TempIdHandle = Rc<TempId>;
|
pub type TempIdHandle = ValueRc<TempId>;
|
||||||
pub type TempIdMap = HashMap<TempIdHandle, KnownEntid>;
|
pub type TempIdMap = HashMap<TempIdHandle, KnownEntid>;
|
||||||
|
|
||||||
pub type LookupRef = Rc<AVPair>;
|
pub type LookupRef = ValueRc<AVPair>;
|
||||||
|
|
||||||
/// Internal representation of an entid on its way to resolution. We either have the simple case (a
|
/// Internal representation of an entid on its way to resolution. We either have the simple case (a
|
||||||
/// numeric entid), a lookup-ref that still needs to be resolved (an atomized [a v] pair), or a temp
|
/// numeric entid), a lookup-ref that still needs to be resolved (an atomized [a v] pair), or a temp
|
||||||
/// ID that needs to be upserted or allocated (an atomized tempid).
|
/// ID that needs to be upserted or allocated (an atomized tempid).
|
||||||
#[derive(Clone,Debug,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
pub enum LookupRefOrTempId {
|
pub enum LookupRefOrTempId {
|
||||||
LookupRef(LookupRef),
|
LookupRef(LookupRef),
|
||||||
TempId(TempIdHandle)
|
TempId(TempIdHandle),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type TermWithTempIdsAndLookupRefs = Term<KnownEntidOr<LookupRefOrTempId>, TypedValueOr<LookupRefOrTempId>>;
|
pub type TermWithTempIdsAndLookupRefs =
|
||||||
|
Term<KnownEntidOr<LookupRefOrTempId>, TypedValueOr<LookupRefOrTempId>>;
|
||||||
pub type TermWithTempIds = Term<KnownEntidOr<TempIdHandle>, TypedValueOr<TempIdHandle>>;
|
pub type TermWithTempIds = Term<KnownEntidOr<TempIdHandle>, TypedValueOr<TempIdHandle>>;
|
||||||
pub type TermWithoutTempIds = Term<KnownEntid, TypedValue>;
|
pub type TermWithoutTempIds = Term<KnownEntid, TypedValue>;
|
||||||
pub type Population = Vec<TermWithTempIds>;
|
pub type Population = Vec<TermWithTempIds>;
|
||||||
|
@ -181,6 +162,14 @@ impl TermWithTempIds {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TermWithoutTempIds {
|
||||||
|
pub(crate) fn rewrap<A, B>(self) -> Term<KnownEntidOr<A>, TypedValueOr<B>> {
|
||||||
|
match self {
|
||||||
|
Term::AddOrRetract(op, n, a, v) => Term::AddOrRetract(op, Left(n), a, Left(v)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Given a `KnownEntidOr` or a `TypedValueOr`, replace any internal `LookupRef` with the entid from
|
/// Given a `KnownEntidOr` or a `TypedValueOr`, replace any internal `LookupRef` with the entid from
|
||||||
/// the given map. Fail if any `LookupRef` cannot be replaced.
|
/// the given map. Fail if any `LookupRef` cannot be replaced.
|
||||||
///
|
///
|
||||||
|
@ -190,16 +179,31 @@ impl TermWithTempIds {
|
||||||
/// The reason for this awkward expression is that we're parameterizing over the _type constructor_
|
/// The reason for this awkward expression is that we're parameterizing over the _type constructor_
|
||||||
/// (`EntidOr` or `TypedValueOr`), which is not trivial to express in Rust. This only works because
|
/// (`EntidOr` or `TypedValueOr`), which is not trivial to express in Rust. This only works because
|
||||||
/// they're both the same `Result<...>` type with different parameterizations.
|
/// they're both the same `Result<...>` type with different parameterizations.
|
||||||
pub fn replace_lookup_ref<T, U>(lookup_map: &AVMap, desired_or: Either<T, LookupRefOrTempId>, lift: U) -> errors::Result<Either<T, TempIdHandle>> where U: FnOnce(Entid) -> T {
|
pub fn replace_lookup_ref<T, U>(
|
||||||
|
lookup_map: &AVMap,
|
||||||
|
desired_or: Either<T, LookupRefOrTempId>,
|
||||||
|
lift: U,
|
||||||
|
) -> errors::Result<Either<T, TempIdHandle>>
|
||||||
|
where
|
||||||
|
U: FnOnce(Entid) -> T,
|
||||||
|
{
|
||||||
match desired_or {
|
match desired_or {
|
||||||
Left(desired) => Ok(Left(desired)), // N.b., must unwrap here -- the ::Left types are different!
|
Left(desired) => Ok(Left(desired)), // N.b., must unwrap here -- the ::Left types are different!
|
||||||
Right(other) => {
|
Right(other) => {
|
||||||
match other {
|
match other {
|
||||||
LookupRefOrTempId::TempId(t) => Ok(Right(t)),
|
LookupRefOrTempId::TempId(t) => Ok(Right(t)),
|
||||||
LookupRefOrTempId::LookupRef(av) => lookup_map.get(&*av)
|
LookupRefOrTempId::LookupRef(av) => lookup_map
|
||||||
.map(|x| lift(*x)).map(Left)
|
.get(&*av)
|
||||||
|
.map(|x| lift(*x))
|
||||||
|
.map(Left)
|
||||||
// XXX TODO: fix this error kind!
|
// XXX TODO: fix this error kind!
|
||||||
.ok_or_else(|| DbError::UnrecognizedIdent(format!("couldn't lookup [a v]: {:?}", (*av).clone())).into()),
|
.ok_or_else(|| {
|
||||||
|
DbErrorKind::UnrecognizedIdent(format!(
|
||||||
|
"couldn't lookup [a v]: {:?}",
|
||||||
|
(*av).clone()
|
||||||
|
))
|
||||||
|
.into()
|
||||||
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -213,4 +217,5 @@ pub(crate) struct AddAndRetract {
|
||||||
|
|
||||||
// A trie-like structure mapping a -> e -> v that prefix compresses and makes uniqueness constraint
|
// A trie-like structure mapping a -> e -> v that prefix compresses and makes uniqueness constraint
|
||||||
// checking more efficient. BTree* for deterministic errors.
|
// checking more efficient. BTree* for deterministic errors.
|
||||||
pub(crate) type AEVTrie<'schema> = BTreeMap<(Entid, &'schema Attribute), BTreeMap<Entid, AddAndRetract>>;
|
pub(crate) type AEVTrie<'schema> =
|
||||||
|
BTreeMap<(Entid, &'schema Attribute), BTreeMap<Entid, AddAndRetract>>;
|
||||||
|
|
103
db/src/lib.rs
103
db/src/lib.rs
|
@ -9,114 +9,93 @@
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
extern crate failure;
|
extern crate failure;
|
||||||
#[macro_use] extern crate failure_derive;
|
|
||||||
extern crate indexmap;
|
extern crate indexmap;
|
||||||
extern crate itertools;
|
extern crate itertools;
|
||||||
#[macro_use] extern crate lazy_static;
|
#[macro_use]
|
||||||
#[macro_use] extern crate log;
|
extern crate lazy_static;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
|
#[cfg(feature = "syncable")]
|
||||||
|
#[macro_use]
|
||||||
|
extern crate serde_derive;
|
||||||
|
|
||||||
extern crate num;
|
|
||||||
extern crate petgraph;
|
extern crate petgraph;
|
||||||
extern crate rusqlite;
|
extern crate rusqlite;
|
||||||
extern crate tabwriter;
|
extern crate tabwriter;
|
||||||
extern crate time;
|
extern crate time;
|
||||||
|
|
||||||
#[macro_use] extern crate edn;
|
#[macro_use]
|
||||||
#[macro_use] extern crate mentat_core;
|
extern crate edn;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate mentat_core;
|
||||||
|
extern crate db_traits;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate core_traits;
|
||||||
extern crate mentat_sql;
|
extern crate mentat_sql;
|
||||||
|
|
||||||
use std::iter::repeat;
|
use std::iter::repeat;
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
||||||
pub use errors::{
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
DbError,
|
|
||||||
Result,
|
#[macro_use]
|
||||||
SchemaConstraintViolation,
|
pub mod debug;
|
||||||
};
|
|
||||||
#[macro_use] pub mod errors;
|
|
||||||
|
|
||||||
mod add_retract_alter_set;
|
mod add_retract_alter_set;
|
||||||
|
mod bootstrap;
|
||||||
pub mod cache;
|
pub mod cache;
|
||||||
pub mod db;
|
pub mod db;
|
||||||
mod bootstrap;
|
|
||||||
pub mod debug;
|
|
||||||
pub mod entids;
|
pub mod entids;
|
||||||
pub mod internal_types; // pub because we need them for building entities programmatically.
|
pub mod internal_types; // pub because we need them for building entities programmatically.
|
||||||
mod metadata;
|
mod metadata;
|
||||||
mod schema;
|
mod schema;
|
||||||
pub mod tx_observer;
|
pub mod timelines;
|
||||||
mod watcher;
|
|
||||||
mod tx;
|
mod tx;
|
||||||
mod tx_checking;
|
mod tx_checking;
|
||||||
|
pub mod tx_observer;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
mod upsert_resolution;
|
mod upsert_resolution;
|
||||||
|
mod watcher;
|
||||||
|
|
||||||
// Export these for reference from tests. cfg(test) should work, but doesn't.
|
// Export these for reference from sync code and tests.
|
||||||
// #[cfg(test)]
|
pub use crate::bootstrap::{TX0, USER0, V1_PARTS};
|
||||||
pub use bootstrap::{
|
|
||||||
TX0,
|
|
||||||
USER0,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use schema::{
|
pub static TIMELINE_MAIN: i64 = 0;
|
||||||
AttributeBuilder,
|
|
||||||
AttributeValidation,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use bootstrap::{
|
pub use crate::schema::{AttributeBuilder, AttributeValidation};
|
||||||
CORE_SCHEMA_VERSION,
|
|
||||||
};
|
pub use crate::bootstrap::CORE_SCHEMA_VERSION;
|
||||||
|
|
||||||
use edn::symbols;
|
use edn::symbols;
|
||||||
|
|
||||||
pub use entids::{
|
pub use crate::entids::DB_SCHEMA_CORE;
|
||||||
DB_SCHEMA_CORE,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use db::{
|
pub use crate::db::{new_connection, TypedSQLValue};
|
||||||
TypedSQLValue,
|
|
||||||
new_connection,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[cfg(feature = "sqlcipher")]
|
#[cfg(feature = "sqlcipher")]
|
||||||
pub use db::{
|
pub use db::{change_encryption_key, new_connection_with_key};
|
||||||
new_connection_with_key,
|
|
||||||
change_encryption_key,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use watcher::{
|
pub use crate::watcher::TransactWatcher;
|
||||||
TransactWatcher,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use tx::{
|
pub use crate::tx::{transact, transact_terms};
|
||||||
transact,
|
|
||||||
transact_terms,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use tx_observer::{
|
pub use crate::tx_observer::{InProgressObserverTransactWatcher, TxObservationService, TxObserver};
|
||||||
InProgressObserverTransactWatcher,
|
|
||||||
TxObservationService,
|
|
||||||
TxObserver,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub use types::{
|
pub use crate::types::{AttributeSet, Partition, PartitionMap, TransactableValue, DB};
|
||||||
AttributeSet,
|
|
||||||
DB,
|
|
||||||
PartitionMap,
|
|
||||||
TransactableValue,
|
|
||||||
TxReport,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub fn to_namespaced_keyword(s: &str) -> Result<symbols::Keyword> {
|
pub fn to_namespaced_keyword(s: &str) -> Result<symbols::Keyword> {
|
||||||
let splits = [':', '/'];
|
let splits = [':', '/'];
|
||||||
let mut i = s.split(&splits[..]);
|
let mut i = s.split(&splits[..]);
|
||||||
let nsk = match (i.next(), i.next(), i.next(), i.next()) {
|
let nsk = match (i.next(), i.next(), i.next(), i.next()) {
|
||||||
(Some(""), Some(namespace), Some(name), None) => Some(symbols::Keyword::namespaced(namespace, name)),
|
(Some(""), Some(namespace), Some(name), None) => {
|
||||||
|
Some(symbols::Keyword::namespaced(namespace, name))
|
||||||
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
nsk.ok_or(DbError::NotYetImplemented(format!("InvalidKeyword: {}", s)).into())
|
nsk.ok_or_else(|| DbErrorKind::NotYetImplemented(format!("InvalidKeyword: {}", s)).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Prepare an SQL `VALUES` block, like (?, ?, ?), (?, ?, ?).
|
/// Prepare an SQL `VALUES` block, like (?, ?, ?), (?, ?, ?).
|
||||||
|
|
|
@ -26,31 +26,21 @@
|
||||||
|
|
||||||
use failure::ResultExt;
|
use failure::ResultExt;
|
||||||
|
|
||||||
use std::collections::{BTreeMap, BTreeSet};
|
|
||||||
use std::collections::btree_map::Entry;
|
use std::collections::btree_map::Entry;
|
||||||
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
|
|
||||||
use add_retract_alter_set::{
|
use crate::add_retract_alter_set::AddRetractAlterSet;
|
||||||
AddRetractAlterSet,
|
use crate::entids;
|
||||||
};
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
use edn::symbols;
|
use edn::symbols;
|
||||||
use entids;
|
|
||||||
use errors::{
|
|
||||||
DbError,
|
|
||||||
Result,
|
|
||||||
};
|
|
||||||
use mentat_core::{
|
|
||||||
attribute,
|
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
AttributeMap,
|
|
||||||
TypedValue,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
|
|
||||||
use schema::{
|
use core_traits::{attribute, Entid, TypedValue, ValueType};
|
||||||
AttributeBuilder,
|
|
||||||
AttributeValidation,
|
use mentat_core::{AttributeMap, Schema};
|
||||||
};
|
|
||||||
|
use crate::schema::{AttributeBuilder, AttributeValidation};
|
||||||
|
|
||||||
|
use crate::types::EAV;
|
||||||
|
|
||||||
/// An alteration to an attribute.
|
/// An alteration to an attribute.
|
||||||
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
|
@ -92,25 +82,98 @@ pub struct MetadataReport {
|
||||||
|
|
||||||
impl MetadataReport {
|
impl MetadataReport {
|
||||||
pub fn attributes_did_change(&self) -> bool {
|
pub fn attributes_did_change(&self) -> bool {
|
||||||
!(self.attributes_installed.is_empty() &&
|
!(self.attributes_installed.is_empty() && self.attributes_altered.is_empty())
|
||||||
self.attributes_altered.is_empty())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Update an 'AttributeMap' in place given two sets of ident and attribute retractions, which
|
||||||
|
/// together contain enough information to reason about a "schema retraction".
|
||||||
|
///
|
||||||
|
/// Schema may only be retracted if all of its necessary attributes are being retracted:
|
||||||
|
/// - :db/ident, :db/valueType, :db/cardinality.
|
||||||
|
///
|
||||||
|
/// Note that this is currently incomplete/flawed:
|
||||||
|
/// - we're allowing optional attributes to not be retracted and dangle afterwards
|
||||||
|
///
|
||||||
|
/// Returns a set of attribute retractions which do not involve schema-defining attributes.
|
||||||
|
fn update_attribute_map_from_schema_retractions(
|
||||||
|
attribute_map: &mut AttributeMap,
|
||||||
|
retractions: Vec<EAV>,
|
||||||
|
ident_retractions: &BTreeMap<Entid, symbols::Keyword>,
|
||||||
|
) -> Result<Vec<EAV>> {
|
||||||
|
// Process retractions of schema attributes first. It's allowed to retract a schema attribute
|
||||||
|
// if all of the schema-defining schema attributes are being retracted.
|
||||||
|
// A defining set of attributes is :db/ident, :db/valueType, :db/cardinality.
|
||||||
|
let mut filtered_retractions = vec![];
|
||||||
|
let mut suspect_retractions = vec![];
|
||||||
|
|
||||||
|
// Filter out sets of schema altering retractions.
|
||||||
|
let mut eas = BTreeMap::new();
|
||||||
|
for (e, a, v) in retractions.into_iter() {
|
||||||
|
if entids::is_a_schema_attribute(a) {
|
||||||
|
eas.entry(e).or_insert_with(Vec::new).push(a);
|
||||||
|
suspect_retractions.push((e, a, v));
|
||||||
|
} else {
|
||||||
|
filtered_retractions.push((e, a, v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO (see https://github.com/mozilla/mentat/issues/796).
|
||||||
|
// Retraction of idents is allowed, but if an ident names a schema attribute, then we should enforce
|
||||||
|
// retraction of all of the associated schema attributes.
|
||||||
|
// Unfortunately, our current in-memory schema representation (namely, how we define an Attribute) is not currently
|
||||||
|
// rich enough: it lacks distinction between presence and absence, and instead assumes default values.
|
||||||
|
|
||||||
|
// Currently, in order to do this enforcement correctly, we'd need to inspect 'datoms'.
|
||||||
|
|
||||||
|
// Here is an incorrect way to enforce this. It's incorrect because it prevents us from retracting non-"schema naming" idents.
|
||||||
|
// for retracted_e in ident_retractions.keys() {
|
||||||
|
// if !eas.contains_key(retracted_e) {
|
||||||
|
// bail!(DbErrorKind::BadSchemaAssertion(format!("Retracting :db/ident of a schema without retracting its defining attributes is not permitted.")));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
for (e, a, v) in suspect_retractions.into_iter() {
|
||||||
|
let attributes = eas.get(&e).unwrap();
|
||||||
|
|
||||||
|
// Found a set of retractions which negate a schema.
|
||||||
|
if attributes.contains(&entids::DB_CARDINALITY)
|
||||||
|
&& attributes.contains(&entids::DB_VALUE_TYPE)
|
||||||
|
{
|
||||||
|
// Ensure that corresponding :db/ident is also being retracted at the same time.
|
||||||
|
if ident_retractions.contains_key(&e) {
|
||||||
|
// Remove attributes corresponding to retracted attribute.
|
||||||
|
attribute_map.remove(&e);
|
||||||
|
} else {
|
||||||
|
bail!(DbErrorKind::BadSchemaAssertion("Retracting defining attributes of a schema without retracting its :db/ident is not permitted.".to_string()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filtered_retractions.push((e, a, v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(filtered_retractions)
|
||||||
|
}
|
||||||
|
|
||||||
/// Update a `AttributeMap` in place from the given `[e a typed_value]` triples.
|
/// Update a `AttributeMap` in place from the given `[e a typed_value]` triples.
|
||||||
///
|
///
|
||||||
/// This is suitable for producing a `AttributeMap` from the `schema` materialized view, which does not
|
/// This is suitable for producing a `AttributeMap` from the `schema` materialized view, which does not
|
||||||
/// contain install and alter markers.
|
/// contain install and alter markers.
|
||||||
///
|
///
|
||||||
/// Returns a report summarizing the mutations that were applied.
|
/// Returns a report summarizing the mutations that were applied.
|
||||||
pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut AttributeMap, assertions: A, retractions: R) -> Result<MetadataReport>
|
pub fn update_attribute_map_from_entid_triples(
|
||||||
where A: IntoIterator<Item=(Entid, Entid, TypedValue)>,
|
attribute_map: &mut AttributeMap,
|
||||||
R: IntoIterator<Item=(Entid, Entid, TypedValue)> {
|
assertions: Vec<EAV>,
|
||||||
|
retractions: Vec<EAV>,
|
||||||
fn attribute_builder_to_modify(attribute_id: Entid, existing: &AttributeMap) -> AttributeBuilder {
|
) -> Result<MetadataReport> {
|
||||||
existing.get(&attribute_id)
|
fn attribute_builder_to_modify(
|
||||||
.map(AttributeBuilder::to_modify_attribute)
|
attribute_id: Entid,
|
||||||
.unwrap_or_else(AttributeBuilder::default)
|
existing: &AttributeMap,
|
||||||
|
) -> AttributeBuilder {
|
||||||
|
existing
|
||||||
|
.get(&attribute_id)
|
||||||
|
.map(AttributeBuilder::modify_attribute)
|
||||||
|
.unwrap_or_else(AttributeBuilder::default)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Group mutations by impacted entid.
|
// Group mutations by impacted entid.
|
||||||
|
@ -118,24 +181,24 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
|
|
||||||
// For retractions, we start with an attribute builder that's pre-populated with the existing
|
// For retractions, we start with an attribute builder that's pre-populated with the existing
|
||||||
// attribute values. That allows us to check existing values and unset them.
|
// attribute values. That allows us to check existing values and unset them.
|
||||||
for (entid, attr, ref value) in retractions.into_iter() {
|
for (entid, attr, ref value) in retractions {
|
||||||
let builder = builders.entry(entid).or_insert_with(|| attribute_builder_to_modify(entid, attribute_map));
|
let builder = builders
|
||||||
|
.entry(entid)
|
||||||
|
.or_insert_with(|| attribute_builder_to_modify(entid, attribute_map));
|
||||||
match attr {
|
match attr {
|
||||||
// You can only retract :db/unique, :db/doc, :db/isComponent; all others
|
// You can only retract :db/unique, :db/isComponent; all others must be altered instead
|
||||||
// must be altered instead of retracted, or are not allowed to change.
|
// of retracted, or are not allowed to change.
|
||||||
entids::DB_DOC => {
|
|
||||||
// Nothing to do here; we don't keep docstrings inside `Attribute`s.
|
|
||||||
},
|
|
||||||
entids::DB_IS_COMPONENT => {
|
entids::DB_IS_COMPONENT => {
|
||||||
match value {
|
match value {
|
||||||
&TypedValue::Boolean(v) if builder.component == Some(v) => {
|
&TypedValue::Boolean(v) if builder.component == Some(v) => {
|
||||||
builder.component(false);
|
builder.component(false);
|
||||||
},
|
},
|
||||||
v => {
|
v => {
|
||||||
bail!(DbError::BadSchemaAssertion(format!("Attempted to retract :db/isComponent with the wrong value {:?}.", v)));
|
bail!(DbErrorKind::BadSchemaAssertion(format!("Attempted to retract :db/isComponent with the wrong value {:?}.", v)));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
entids::DB_UNIQUE => {
|
entids::DB_UNIQUE => {
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Ref(u) => {
|
TypedValue::Ref(u) => {
|
||||||
|
@ -147,16 +210,25 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
builder.non_unique();
|
builder.non_unique();
|
||||||
},
|
},
|
||||||
v => {
|
v => {
|
||||||
bail!(DbError::BadSchemaAssertion(format!("Attempted to retract :db/unique with the wrong value {}.", v)));
|
bail!(DbErrorKind::BadSchemaAssertion(format!("Attempted to retract :db/unique with the wrong value {}.", v)));
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [:db/retract _ :db/unique :db.unique/_] but got [:db/retract {} :db/unique {:?}]", entid, value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [:db/retract _ :db/unique :db.unique/_] but got [:db/retract {} :db/unique {:?}]", entid, value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => {
|
|
||||||
bail!(DbError::BadSchemaAssertion(format!("Retracting attribute {} for entity {} not permitted.", attr, entid)));
|
entids::DB_VALUE_TYPE |
|
||||||
|
entids::DB_CARDINALITY |
|
||||||
|
entids::DB_INDEX |
|
||||||
|
entids::DB_FULLTEXT |
|
||||||
|
entids::DB_NO_HISTORY => {
|
||||||
|
bail!(DbErrorKind::BadSchemaAssertion(format!("Retracting attribute {} for entity {} not permitted.", attr, entid)));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_ => {
|
||||||
|
bail!(DbErrorKind::BadSchemaAssertion(format!("Do not recognize attribute {} for entid {}", attr, entid)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,13 +238,6 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
|
|
||||||
// TODO: improve error messages throughout.
|
// TODO: improve error messages throughout.
|
||||||
match attr {
|
match attr {
|
||||||
entids::DB_DOC => {
|
|
||||||
match *value {
|
|
||||||
TypedValue::String(_) => {},
|
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/doc \"string value\"] but got [... :db/doc {:?}] for entid {} and attribute {}", value, entid, attr)))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
entids::DB_VALUE_TYPE => {
|
entids::DB_VALUE_TYPE => {
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Ref(entids::DB_TYPE_BOOLEAN) => { builder.value_type(ValueType::Boolean); },
|
TypedValue::Ref(entids::DB_TYPE_BOOLEAN) => { builder.value_type(ValueType::Boolean); },
|
||||||
|
@ -183,7 +248,8 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
TypedValue::Ref(entids::DB_TYPE_REF) => { builder.value_type(ValueType::Ref); },
|
TypedValue::Ref(entids::DB_TYPE_REF) => { builder.value_type(ValueType::Ref); },
|
||||||
TypedValue::Ref(entids::DB_TYPE_STRING) => { builder.value_type(ValueType::String); },
|
TypedValue::Ref(entids::DB_TYPE_STRING) => { builder.value_type(ValueType::String); },
|
||||||
TypedValue::Ref(entids::DB_TYPE_UUID) => { builder.value_type(ValueType::Uuid); },
|
TypedValue::Ref(entids::DB_TYPE_UUID) => { builder.value_type(ValueType::Uuid); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/valueType :db.type/*] but got [... :db/valueType {:?}] for entid {} and attribute {}", value, entid, attr)))
|
TypedValue::Ref(entids::DB_TYPE_BYTES) => { builder.value_type(ValueType::Bytes); },
|
||||||
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/valueType :db.type/*] but got [... :db/valueType {:?}] for entid {} and attribute {}", value, entid, attr)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -191,7 +257,7 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Ref(entids::DB_CARDINALITY_MANY) => { builder.multival(true); },
|
TypedValue::Ref(entids::DB_CARDINALITY_MANY) => { builder.multival(true); },
|
||||||
TypedValue::Ref(entids::DB_CARDINALITY_ONE) => { builder.multival(false); },
|
TypedValue::Ref(entids::DB_CARDINALITY_ONE) => { builder.multival(false); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/cardinality :db.cardinality/many|:db.cardinality/one] but got [... :db/cardinality {:?}]", value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/cardinality :db.cardinality/many|:db.cardinality/one] but got [... :db/cardinality {:?}]", value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -199,43 +265,43 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Ref(entids::DB_UNIQUE_VALUE) => { builder.unique(attribute::Unique::Value); },
|
TypedValue::Ref(entids::DB_UNIQUE_VALUE) => { builder.unique(attribute::Unique::Value); },
|
||||||
TypedValue::Ref(entids::DB_UNIQUE_IDENTITY) => { builder.unique(attribute::Unique::Identity); },
|
TypedValue::Ref(entids::DB_UNIQUE_IDENTITY) => { builder.unique(attribute::Unique::Identity); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/unique :db.unique/value|:db.unique/identity] but got [... :db/unique {:?}]", value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/unique :db.unique/value|:db.unique/identity] but got [... :db/unique {:?}]", value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
entids::DB_INDEX => {
|
entids::DB_INDEX => {
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Boolean(x) => { builder.index(x); },
|
TypedValue::Boolean(x) => { builder.index(x); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/index true|false] but got [... :db/index {:?}]", value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/index true|false] but got [... :db/index {:?}]", value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
entids::DB_FULLTEXT => {
|
entids::DB_FULLTEXT => {
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Boolean(x) => { builder.fulltext(x); },
|
TypedValue::Boolean(x) => { builder.fulltext(x); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/fulltext true|false] but got [... :db/fulltext {:?}]", value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/fulltext true|false] but got [... :db/fulltext {:?}]", value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
entids::DB_IS_COMPONENT => {
|
entids::DB_IS_COMPONENT => {
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Boolean(x) => { builder.component(x); },
|
TypedValue::Boolean(x) => { builder.component(x); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/isComponent true|false] but got [... :db/isComponent {:?}]", value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/isComponent true|false] but got [... :db/isComponent {:?}]", value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
entids::DB_NO_HISTORY => {
|
entids::DB_NO_HISTORY => {
|
||||||
match *value {
|
match *value {
|
||||||
TypedValue::Boolean(x) => { builder.no_history(x); },
|
TypedValue::Boolean(x) => { builder.no_history(x); },
|
||||||
_ => bail!(DbError::BadSchemaAssertion(format!("Expected [... :db/noHistory true|false] but got [... :db/noHistory {:?}]", value)))
|
_ => bail!(DbErrorKind::BadSchemaAssertion(format!("Expected [... :db/noHistory true|false] but got [... :db/noHistory {:?}]", value)))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
bail!(DbError::BadSchemaAssertion(format!("Do not recognize attribute {} for entid {}", attr, entid)))
|
bail!(DbErrorKind::BadSchemaAssertion(format!("Do not recognize attribute {} for entid {}", attr, entid)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
let mut attributes_installed: BTreeSet<Entid> = BTreeSet::default();
|
let mut attributes_installed: BTreeSet<Entid> = BTreeSet::default();
|
||||||
let mut attributes_altered: BTreeMap<Entid, Vec<AttributeAlteration>> = BTreeMap::default();
|
let mut attributes_altered: BTreeMap<Entid, Vec<AttributeAlteration>> = BTreeMap::default();
|
||||||
|
@ -244,26 +310,36 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
match attribute_map.entry(entid) {
|
match attribute_map.entry(entid) {
|
||||||
Entry::Vacant(entry) => {
|
Entry::Vacant(entry) => {
|
||||||
// Validate once…
|
// Validate once…
|
||||||
builder.validate_install_attribute().context(DbError::BadSchemaAssertion(format!("Schema alteration for new attribute with entid {} is not valid", entid)))?;
|
builder
|
||||||
|
.validate_install_attribute()
|
||||||
|
.context(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
"Schema alteration for new attribute with entid {} is not valid",
|
||||||
|
entid
|
||||||
|
)))?;
|
||||||
|
|
||||||
// … and twice, now we have the Attribute.
|
// … and twice, now we have the Attribute.
|
||||||
let a = builder.build();
|
let a = builder.build();
|
||||||
a.validate(|| entid.to_string())?;
|
a.validate(|| entid.to_string())?;
|
||||||
entry.insert(builder.build());
|
entry.insert(a);
|
||||||
attributes_installed.insert(entid);
|
attributes_installed.insert(entid);
|
||||||
},
|
}
|
||||||
|
|
||||||
Entry::Occupied(mut entry) => {
|
Entry::Occupied(mut entry) => {
|
||||||
builder.validate_alter_attribute().context(DbError::BadSchemaAssertion(format!("Schema alteration for existing attribute with entid {} is not valid", entid)))?;
|
builder
|
||||||
|
.validate_alter_attribute()
|
||||||
|
.context(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
"Schema alteration for existing attribute with entid {} is not valid",
|
||||||
|
entid
|
||||||
|
)))?;
|
||||||
let mutations = builder.mutate(entry.get_mut());
|
let mutations = builder.mutate(entry.get_mut());
|
||||||
attributes_altered.insert(entid, mutations);
|
attributes_altered.insert(entid, mutations);
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(MetadataReport {
|
Ok(MetadataReport {
|
||||||
attributes_installed: attributes_installed,
|
attributes_installed,
|
||||||
attributes_altered: attributes_altered,
|
attributes_altered,
|
||||||
idents_altered: BTreeMap::default(),
|
idents_altered: BTreeMap::default(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -276,14 +352,19 @@ pub fn update_attribute_map_from_entid_triples<A, R>(attribute_map: &mut Attribu
|
||||||
/// This is suitable for mutating a `Schema` from an applied transaction.
|
/// This is suitable for mutating a `Schema` from an applied transaction.
|
||||||
///
|
///
|
||||||
/// Returns a report summarizing the mutations that were applied.
|
/// Returns a report summarizing the mutations that were applied.
|
||||||
pub fn update_schema_from_entid_quadruples<U>(schema: &mut Schema, assertions: U) -> Result<MetadataReport>
|
pub fn update_schema_from_entid_quadruples<U>(
|
||||||
where U: IntoIterator<Item=(Entid, Entid, TypedValue, bool)> {
|
schema: &mut Schema,
|
||||||
|
assertions: U,
|
||||||
|
) -> Result<MetadataReport>
|
||||||
|
where
|
||||||
|
U: IntoIterator<Item = (Entid, Entid, TypedValue, bool)>,
|
||||||
|
{
|
||||||
// Group attribute assertions into asserted, retracted, and updated. We assume all our
|
// Group attribute assertions into asserted, retracted, and updated. We assume all our
|
||||||
// attribute assertions are :db/cardinality :db.cardinality/one (so they'll only be added or
|
// attribute assertions are :db/cardinality :db.cardinality/one (so they'll only be added or
|
||||||
// retracted at most once), which means all attribute alterations are simple changes from an old
|
// retracted at most once), which means all attribute alterations are simple changes from an old
|
||||||
// value to a new value.
|
// value to a new value.
|
||||||
let mut attribute_set: AddRetractAlterSet<(Entid, Entid), TypedValue> = AddRetractAlterSet::default();
|
let mut attribute_set: AddRetractAlterSet<(Entid, Entid), TypedValue> =
|
||||||
|
AddRetractAlterSet::default();
|
||||||
let mut ident_set: AddRetractAlterSet<Entid, symbols::Keyword> = AddRetractAlterSet::default();
|
let mut ident_set: AddRetractAlterSet<Entid, symbols::Keyword> = AddRetractAlterSet::default();
|
||||||
|
|
||||||
for (e, a, typed_value, added) in assertions.into_iter() {
|
for (e, a, typed_value, added) in assertions.into_iter() {
|
||||||
|
@ -291,7 +372,7 @@ pub fn update_schema_from_entid_quadruples<U>(schema: &mut Schema, assertions: U
|
||||||
if a == entids::DB_IDENT {
|
if a == entids::DB_IDENT {
|
||||||
if let TypedValue::Keyword(ref keyword) = typed_value {
|
if let TypedValue::Keyword(ref keyword) = typed_value {
|
||||||
ident_set.witness(e, keyword.as_ref().clone(), added);
|
ident_set.witness(e, keyword.as_ref().clone(), added);
|
||||||
continue
|
continue;
|
||||||
} else {
|
} else {
|
||||||
// Something is terribly wrong: the schema ensures we have a keyword.
|
// Something is terribly wrong: the schema ensures we have a keyword.
|
||||||
unreachable!();
|
unreachable!();
|
||||||
|
@ -302,13 +383,33 @@ pub fn update_schema_from_entid_quadruples<U>(schema: &mut Schema, assertions: U
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect triples.
|
// Collect triples.
|
||||||
let retracted_triples = attribute_set.retracted.into_iter().map(|((e, a), typed_value)| (e, a, typed_value));
|
let retracted_triples = attribute_set
|
||||||
let asserted_triples = attribute_set.asserted.into_iter().map(|((e, a), typed_value)| (e, a, typed_value));
|
.retracted
|
||||||
let altered_triples = attribute_set.altered.into_iter().map(|((e, a), (_old_value, new_value))| (e, a, new_value));
|
.into_iter()
|
||||||
|
.map(|((e, a), typed_value)| (e, a, typed_value));
|
||||||
|
let asserted_triples = attribute_set
|
||||||
|
.asserted
|
||||||
|
.into_iter()
|
||||||
|
.map(|((e, a), typed_value)| (e, a, typed_value));
|
||||||
|
let altered_triples = attribute_set
|
||||||
|
.altered
|
||||||
|
.into_iter()
|
||||||
|
.map(|((e, a), (_old_value, new_value))| (e, a, new_value));
|
||||||
|
|
||||||
let report = update_attribute_map_from_entid_triples(&mut schema.attribute_map,
|
// First we process retractions which remove schema.
|
||||||
asserted_triples.chain(altered_triples),
|
// This operation consumes our current list of attribute retractions, producing a filtered one.
|
||||||
retracted_triples)?;
|
let non_schema_retractions = update_attribute_map_from_schema_retractions(
|
||||||
|
&mut schema.attribute_map,
|
||||||
|
retracted_triples.collect(),
|
||||||
|
&ident_set.retracted,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
// Now we process all other retractions.
|
||||||
|
let report = update_attribute_map_from_entid_triples(
|
||||||
|
&mut schema.attribute_map,
|
||||||
|
asserted_triples.chain(altered_triples).collect(),
|
||||||
|
non_schema_retractions,
|
||||||
|
)?;
|
||||||
|
|
||||||
let mut idents_altered: BTreeMap<Entid, IdentAlteration> = BTreeMap::new();
|
let mut idents_altered: BTreeMap<Entid, IdentAlteration> = BTreeMap::new();
|
||||||
|
|
||||||
|
@ -326,18 +427,25 @@ pub fn update_schema_from_entid_quadruples<U>(schema: &mut Schema, assertions: U
|
||||||
idents_altered.insert(entid, IdentAlteration::Ident(new_ident.clone()));
|
idents_altered.insert(entid, IdentAlteration::Ident(new_ident.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (entid, ident) in ident_set.retracted {
|
for (entid, ident) in &ident_set.retracted {
|
||||||
schema.entid_map.remove(&entid);
|
schema.entid_map.remove(entid);
|
||||||
schema.ident_map.remove(&ident);
|
schema.ident_map.remove(ident);
|
||||||
idents_altered.insert(entid, IdentAlteration::Ident(ident.clone()));
|
idents_altered.insert(*entid, IdentAlteration::Ident(ident.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if report.attributes_did_change() {
|
// Component attributes need to change if either:
|
||||||
|
// - a component attribute changed
|
||||||
|
// - a schema attribute that was a component was retracted
|
||||||
|
// These two checks are a rather heavy-handed way of keeping schema's
|
||||||
|
// component_attributes up-to-date: most of the time we'll rebuild it
|
||||||
|
// even though it's not necessary (e.g. a schema attribute that's _not_
|
||||||
|
// a component was removed, or a non-component related attribute changed).
|
||||||
|
if report.attributes_did_change() || !ident_set.retracted.is_empty() {
|
||||||
schema.update_component_attributes();
|
schema.update_component_attributes();
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(MetadataReport {
|
Ok(MetadataReport {
|
||||||
idents_altered: idents_altered,
|
idents_altered,
|
||||||
.. report
|
..report
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
545
db/src/schema.rs
545
db/src/schema.rs
|
@ -10,51 +10,57 @@
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use db::TypedSQLValue;
|
use crate::db::TypedSQLValue;
|
||||||
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
use edn;
|
use edn;
|
||||||
use errors::{
|
|
||||||
DbError,
|
|
||||||
Result,
|
|
||||||
};
|
|
||||||
use edn::symbols;
|
use edn::symbols;
|
||||||
use mentat_core::{
|
|
||||||
attribute,
|
use core_traits::{attribute, Attribute, Entid, KnownEntid, TypedValue, ValueType};
|
||||||
Attribute,
|
|
||||||
Entid,
|
use crate::metadata;
|
||||||
EntidMap,
|
use crate::metadata::AttributeAlteration;
|
||||||
HasSchema,
|
use mentat_core::{AttributeMap, EntidMap, HasSchema, IdentMap, Schema};
|
||||||
IdentMap,
|
|
||||||
KnownEntid,
|
|
||||||
Schema,
|
|
||||||
AttributeMap,
|
|
||||||
TypedValue,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
use metadata;
|
|
||||||
use metadata::{
|
|
||||||
AttributeAlteration,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub trait AttributeValidation {
|
pub trait AttributeValidation {
|
||||||
fn validate<F>(&self, ident: F) -> Result<()> where F: Fn() -> String;
|
fn validate<F>(&self, ident: F) -> Result<()>
|
||||||
|
where
|
||||||
|
F: Fn() -> String;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AttributeValidation for Attribute {
|
impl AttributeValidation for Attribute {
|
||||||
fn validate<F>(&self, ident: F) -> Result<()> where F: Fn() -> String {
|
fn validate<F>(&self, ident: F) -> Result<()>
|
||||||
|
where
|
||||||
|
F: Fn() -> String,
|
||||||
|
{
|
||||||
if self.unique == Some(attribute::Unique::Value) && !self.index {
|
if self.unique == Some(attribute::Unique::Value) && !self.index {
|
||||||
bail!(DbError::BadSchemaAssertion(format!(":db/unique :db/unique_value without :db/index true for entid: {}", ident())))
|
bail!(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
":db/unique :db/unique_value without :db/index true for entid: {}",
|
||||||
|
ident()
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
if self.unique == Some(attribute::Unique::Identity) && !self.index {
|
if self.unique == Some(attribute::Unique::Identity) && !self.index {
|
||||||
bail!(DbError::BadSchemaAssertion(format!(":db/unique :db/unique_identity without :db/index true for entid: {}", ident())))
|
bail!(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
":db/unique :db/unique_identity without :db/index true for entid: {}",
|
||||||
|
ident()
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
if self.fulltext && self.value_type != ValueType::String {
|
if self.fulltext && self.value_type != ValueType::String {
|
||||||
bail!(DbError::BadSchemaAssertion(format!(":db/fulltext true without :db/valueType :db.type/string for entid: {}", ident())))
|
bail!(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
":db/fulltext true without :db/valueType :db.type/string for entid: {}",
|
||||||
|
ident()
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
if self.fulltext && !self.index {
|
if self.fulltext && !self.index {
|
||||||
bail!(DbError::BadSchemaAssertion(format!(":db/fulltext true without :db/index true for entid: {}", ident())))
|
bail!(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
":db/fulltext true without :db/index true for entid: {}",
|
||||||
|
ident()
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
if self.component && self.value_type != ValueType::Ref {
|
if self.component && self.value_type != ValueType::Ref {
|
||||||
bail!(DbError::BadSchemaAssertion(format!(":db/isComponent true without :db/valueType :db.type/ref for entid: {}", ident())))
|
bail!(DbErrorKind::BadSchemaAssertion(format!(
|
||||||
|
":db/isComponent true without :db/valueType :db.type/ref for entid: {}",
|
||||||
|
ident()
|
||||||
|
)))
|
||||||
}
|
}
|
||||||
// TODO: consider warning if we have :db/index true for :db/valueType :db.type/string,
|
// TODO: consider warning if we have :db/index true for :db/valueType :db.type/string,
|
||||||
// since this may be inefficient. More generally, we should try to drive complex
|
// since this may be inefficient. More generally, we should try to drive complex
|
||||||
|
@ -67,13 +73,18 @@ impl AttributeValidation for Attribute {
|
||||||
/// Return `Ok(())` if `attribute_map` defines a valid Mentat schema.
|
/// Return `Ok(())` if `attribute_map` defines a valid Mentat schema.
|
||||||
fn validate_attribute_map(entid_map: &EntidMap, attribute_map: &AttributeMap) -> Result<()> {
|
fn validate_attribute_map(entid_map: &EntidMap, attribute_map: &AttributeMap) -> Result<()> {
|
||||||
for (entid, attribute) in attribute_map {
|
for (entid, attribute) in attribute_map {
|
||||||
let ident = || entid_map.get(entid).map(|ident| ident.to_string()).unwrap_or(entid.to_string());
|
let ident = || {
|
||||||
|
entid_map
|
||||||
|
.get(entid)
|
||||||
|
.map(|ident| ident.to_string())
|
||||||
|
.unwrap_or_else(|| entid.to_string())
|
||||||
|
};
|
||||||
attribute.validate(ident)?;
|
attribute.validate(ident)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone,Debug,Default,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
pub struct AttributeBuilder {
|
pub struct AttributeBuilder {
|
||||||
helpful: bool,
|
helpful: bool,
|
||||||
pub value_type: Option<ValueType>,
|
pub value_type: Option<ValueType>,
|
||||||
|
@ -97,30 +108,30 @@ impl AttributeBuilder {
|
||||||
|
|
||||||
/// Make a new AttributeBuilder from an existing Attribute. This is important to allow
|
/// Make a new AttributeBuilder from an existing Attribute. This is important to allow
|
||||||
/// retraction. Only attributes that we allow to change are duplicated here.
|
/// retraction. Only attributes that we allow to change are duplicated here.
|
||||||
pub fn to_modify_attribute(attribute: &Attribute) -> Self {
|
pub fn modify_attribute(attribute: &Attribute) -> Self {
|
||||||
let mut ab = AttributeBuilder::default();
|
let mut ab = AttributeBuilder::default();
|
||||||
ab.multival = Some(attribute.multival);
|
ab.multival = Some(attribute.multival);
|
||||||
ab.unique = Some(attribute.unique);
|
ab.unique = Some(attribute.unique);
|
||||||
ab.component = Some(attribute.component);
|
ab.component = Some(attribute.component);
|
||||||
ab
|
ab
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn value_type<'a>(&'a mut self, value_type: ValueType) -> &'a mut Self {
|
pub fn value_type(&mut self, value_type: ValueType) -> &mut Self {
|
||||||
self.value_type = Some(value_type);
|
self.value_type = Some(value_type);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn multival<'a>(&'a mut self, multival: bool) -> &'a mut Self {
|
pub fn multival(&mut self, multival: bool) -> &mut Self {
|
||||||
self.multival = Some(multival);
|
self.multival = Some(multival);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn non_unique<'a>(&'a mut self) -> &'a mut Self {
|
pub fn non_unique(&mut self) -> &mut Self {
|
||||||
self.unique = Some(None);
|
self.unique = Some(None);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn unique<'a>(&'a mut self, unique: attribute::Unique) -> &'a mut Self {
|
pub fn unique(&mut self, unique: attribute::Unique) -> &mut Self {
|
||||||
if self.helpful && unique == attribute::Unique::Identity {
|
if self.helpful && unique == attribute::Unique::Identity {
|
||||||
self.index = Some(true);
|
self.index = Some(true);
|
||||||
}
|
}
|
||||||
|
@ -128,12 +139,12 @@ impl AttributeBuilder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn index<'a>(&'a mut self, index: bool) -> &'a mut Self {
|
pub fn index(&mut self, index: bool) -> &mut Self {
|
||||||
self.index = Some(index);
|
self.index = Some(index);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fulltext<'a>(&'a mut self, fulltext: bool) -> &'a mut Self {
|
pub fn fulltext(&mut self, fulltext: bool) -> &mut Self {
|
||||||
self.fulltext = Some(fulltext);
|
self.fulltext = Some(fulltext);
|
||||||
if self.helpful && fulltext {
|
if self.helpful && fulltext {
|
||||||
self.index = Some(true);
|
self.index = Some(true);
|
||||||
|
@ -141,29 +152,35 @@ impl AttributeBuilder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn component<'a>(&'a mut self, component: bool) -> &'a mut Self {
|
pub fn component(&mut self, component: bool) -> &mut Self {
|
||||||
self.component = Some(component);
|
self.component = Some(component);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn no_history<'a>(&'a mut self, no_history: bool) -> &'a mut Self {
|
pub fn no_history(&mut self, no_history: bool) -> &mut Self {
|
||||||
self.no_history = Some(no_history);
|
self.no_history = Some(no_history);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn validate_install_attribute(&self) -> Result<()> {
|
pub fn validate_install_attribute(&self) -> Result<()> {
|
||||||
if self.value_type.is_none() {
|
if self.value_type.is_none() {
|
||||||
bail!(DbError::BadSchemaAssertion("Schema attribute for new attribute does not set :db/valueType".into()));
|
bail!(DbErrorKind::BadSchemaAssertion(
|
||||||
|
"Schema attribute for new attribute does not set :db/valueType".into()
|
||||||
|
));
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn validate_alter_attribute(&self) -> Result<()> {
|
pub fn validate_alter_attribute(&self) -> Result<()> {
|
||||||
if self.value_type.is_some() {
|
if self.value_type.is_some() {
|
||||||
bail!(DbError::BadSchemaAssertion("Schema alteration must not set :db/valueType".into()));
|
bail!(DbErrorKind::BadSchemaAssertion(
|
||||||
|
"Schema alteration must not set :db/valueType".into()
|
||||||
|
));
|
||||||
}
|
}
|
||||||
if self.fulltext.is_some() {
|
if self.fulltext.is_some() {
|
||||||
bail!(DbError::BadSchemaAssertion("Schema alteration must not set :db/fulltext".into()));
|
bail!(DbErrorKind::BadSchemaAssertion(
|
||||||
|
"Schema alteration must not set :db/fulltext".into()
|
||||||
|
));
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -180,7 +197,7 @@ impl AttributeBuilder {
|
||||||
attribute.multival = multival;
|
attribute.multival = multival;
|
||||||
}
|
}
|
||||||
if let Some(ref unique) = self.unique {
|
if let Some(ref unique) = self.unique {
|
||||||
attribute.unique = unique.clone();
|
attribute.unique = *unique;
|
||||||
}
|
}
|
||||||
if let Some(index) = self.index {
|
if let Some(index) = self.index {
|
||||||
attribute.index = index;
|
attribute.index = index;
|
||||||
|
@ -206,14 +223,12 @@ impl AttributeBuilder {
|
||||||
|
|
||||||
if let Some(ref unique) = self.unique {
|
if let Some(ref unique) = self.unique {
|
||||||
if *unique != attribute.unique {
|
if *unique != attribute.unique {
|
||||||
attribute.unique = unique.clone();
|
attribute.unique = *unique;
|
||||||
mutations.push(AttributeAlteration::Unique);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if attribute.unique != None {
|
|
||||||
attribute.unique = None;
|
|
||||||
mutations.push(AttributeAlteration::Unique);
|
mutations.push(AttributeAlteration::Unique);
|
||||||
}
|
}
|
||||||
|
} else if attribute.unique != None {
|
||||||
|
attribute.unique = None;
|
||||||
|
mutations.push(AttributeAlteration::Unique);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(index) = self.index {
|
if let Some(index) = self.index {
|
||||||
|
@ -243,27 +258,37 @@ pub trait SchemaBuilding {
|
||||||
fn require_ident(&self, entid: Entid) -> Result<&symbols::Keyword>;
|
fn require_ident(&self, entid: Entid) -> Result<&symbols::Keyword>;
|
||||||
fn require_entid(&self, ident: &symbols::Keyword) -> Result<KnownEntid>;
|
fn require_entid(&self, ident: &symbols::Keyword) -> Result<KnownEntid>;
|
||||||
fn require_attribute_for_entid(&self, entid: Entid) -> Result<&Attribute>;
|
fn require_attribute_for_entid(&self, entid: Entid) -> Result<&Attribute>;
|
||||||
fn from_ident_map_and_attribute_map(ident_map: IdentMap, attribute_map: AttributeMap) -> Result<Schema>;
|
fn from_ident_map_and_attribute_map(
|
||||||
|
ident_map: IdentMap,
|
||||||
|
attribute_map: AttributeMap,
|
||||||
|
) -> Result<Schema>;
|
||||||
fn from_ident_map_and_triples<U>(ident_map: IdentMap, assertions: U) -> Result<Schema>
|
fn from_ident_map_and_triples<U>(ident_map: IdentMap, assertions: U) -> Result<Schema>
|
||||||
where U: IntoIterator<Item=(symbols::Keyword, symbols::Keyword, TypedValue)>;
|
where
|
||||||
|
U: IntoIterator<Item = (symbols::Keyword, symbols::Keyword, TypedValue)>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SchemaBuilding for Schema {
|
impl SchemaBuilding for Schema {
|
||||||
fn require_ident(&self, entid: Entid) -> Result<&symbols::Keyword> {
|
fn require_ident(&self, entid: Entid) -> Result<&symbols::Keyword> {
|
||||||
self.get_ident(entid).ok_or(DbError::UnrecognizedEntid(entid).into())
|
self.get_ident(entid)
|
||||||
|
.ok_or_else(|| DbErrorKind::UnrecognizedEntid(entid).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn require_entid(&self, ident: &symbols::Keyword) -> Result<KnownEntid> {
|
fn require_entid(&self, ident: &symbols::Keyword) -> Result<KnownEntid> {
|
||||||
self.get_entid(&ident).ok_or(DbError::UnrecognizedIdent(ident.to_string()).into())
|
self.get_entid(&ident)
|
||||||
|
.ok_or_else(|| DbErrorKind::UnrecognizedIdent(ident.to_string()).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn require_attribute_for_entid(&self, entid: Entid) -> Result<&Attribute> {
|
fn require_attribute_for_entid(&self, entid: Entid) -> Result<&Attribute> {
|
||||||
self.attribute_for_entid(entid).ok_or(DbError::UnrecognizedEntid(entid).into())
|
self.attribute_for_entid(entid)
|
||||||
|
.ok_or_else(|| DbErrorKind::UnrecognizedEntid(entid).into())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Create a valid `Schema` from the constituent maps.
|
/// Create a valid `Schema` from the constituent maps.
|
||||||
fn from_ident_map_and_attribute_map(ident_map: IdentMap, attribute_map: AttributeMap) -> Result<Schema> {
|
fn from_ident_map_and_attribute_map(
|
||||||
let entid_map: EntidMap = ident_map.iter().map(|(k, v)| (v.clone(), k.clone())).collect();
|
ident_map: IdentMap,
|
||||||
|
attribute_map: AttributeMap,
|
||||||
|
) -> Result<Schema> {
|
||||||
|
let entid_map: EntidMap = ident_map.iter().map(|(k, v)| (*v, k.clone())).collect();
|
||||||
|
|
||||||
validate_attribute_map(&entid_map, &attribute_map)?;
|
validate_attribute_map(&entid_map, &attribute_map)?;
|
||||||
Ok(Schema::new(ident_map, entid_map, attribute_map))
|
Ok(Schema::new(ident_map, entid_map, attribute_map))
|
||||||
|
@ -271,19 +296,30 @@ impl SchemaBuilding for Schema {
|
||||||
|
|
||||||
/// Turn vec![(Keyword(:ident), Keyword(:key), TypedValue(:value)), ...] into a Mentat `Schema`.
|
/// Turn vec![(Keyword(:ident), Keyword(:key), TypedValue(:value)), ...] into a Mentat `Schema`.
|
||||||
fn from_ident_map_and_triples<U>(ident_map: IdentMap, assertions: U) -> Result<Schema>
|
fn from_ident_map_and_triples<U>(ident_map: IdentMap, assertions: U) -> Result<Schema>
|
||||||
where U: IntoIterator<Item=(symbols::Keyword, symbols::Keyword, TypedValue)>{
|
where
|
||||||
|
U: IntoIterator<Item = (symbols::Keyword, symbols::Keyword, TypedValue)>,
|
||||||
|
{
|
||||||
|
let entid_assertions: Result<Vec<(Entid, Entid, TypedValue)>> = assertions
|
||||||
|
.into_iter()
|
||||||
|
.map(|(symbolic_ident, symbolic_attr, value)| {
|
||||||
|
let ident: i64 = *ident_map
|
||||||
|
.get(&symbolic_ident)
|
||||||
|
.ok_or_else(|| DbErrorKind::UnrecognizedIdent(symbolic_ident.to_string()))?;
|
||||||
|
let attr: i64 = *ident_map
|
||||||
|
.get(&symbolic_attr)
|
||||||
|
.ok_or_else(|| DbErrorKind::UnrecognizedIdent(symbolic_attr.to_string()))?;
|
||||||
|
Ok((ident, attr, value))
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
let entid_assertions: Result<Vec<(Entid, Entid, TypedValue)>> = assertions.into_iter().map(|(symbolic_ident, symbolic_attr, value)| {
|
let mut schema =
|
||||||
let ident: i64 = *ident_map.get(&symbolic_ident).ok_or(DbError::UnrecognizedIdent(symbolic_ident.to_string()))?;
|
Schema::from_ident_map_and_attribute_map(ident_map, AttributeMap::default())?;
|
||||||
let attr: i64 = *ident_map.get(&symbolic_attr).ok_or(DbError::UnrecognizedIdent(symbolic_attr.to_string()))?;
|
let metadata_report = metadata::update_attribute_map_from_entid_triples(
|
||||||
Ok((ident, attr, value))
|
&mut schema.attribute_map,
|
||||||
}).collect();
|
entid_assertions?,
|
||||||
|
// No retractions.
|
||||||
let mut schema = Schema::from_ident_map_and_attribute_map(ident_map, AttributeMap::default())?;
|
vec![],
|
||||||
let metadata_report = metadata::update_attribute_map_from_entid_triples(&mut schema.attribute_map,
|
)?;
|
||||||
entid_assertions?,
|
|
||||||
// No retractions.
|
|
||||||
::std::iter::empty())?;
|
|
||||||
|
|
||||||
// Rebuild the component attributes list if necessary.
|
// Rebuild the component attributes list if necessary.
|
||||||
if metadata_report.attributes_did_change() {
|
if metadata_report.attributes_did_change() {
|
||||||
|
@ -298,17 +334,25 @@ pub trait SchemaTypeChecking {
|
||||||
///
|
///
|
||||||
/// Either assert that the given value is in the value type's value set, or (in limited cases)
|
/// Either assert that the given value is in the value type's value set, or (in limited cases)
|
||||||
/// coerce the given value into the value type's value set.
|
/// coerce the given value into the value type's value set.
|
||||||
fn to_typed_value(&self, value: &edn::ValueAndSpan, value_type: ValueType) -> Result<TypedValue>;
|
fn to_typed_value(
|
||||||
|
&self,
|
||||||
|
value: &edn::ValueAndSpan,
|
||||||
|
value_type: ValueType,
|
||||||
|
) -> Result<TypedValue>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SchemaTypeChecking for Schema {
|
impl SchemaTypeChecking for Schema {
|
||||||
fn to_typed_value(&self, value: &edn::ValueAndSpan, value_type: ValueType) -> Result<TypedValue> {
|
fn to_typed_value(
|
||||||
|
&self,
|
||||||
|
value: &edn::ValueAndSpan,
|
||||||
|
value_type: ValueType,
|
||||||
|
) -> Result<TypedValue> {
|
||||||
// TODO: encapsulate entid-ident-attribute for better error messages, perhaps by including
|
// TODO: encapsulate entid-ident-attribute for better error messages, perhaps by including
|
||||||
// the attribute (rather than just the attribute's value type) into this function or a
|
// the attribute (rather than just the attribute's value type) into this function or a
|
||||||
// wrapper function.
|
// wrapper function.
|
||||||
match TypedValue::from_edn_value(&value.clone().without_spans()) {
|
match TypedValue::from_edn_value(&value.clone().without_spans()) {
|
||||||
// We don't recognize this EDN at all. Get out!
|
// We don't recognize this EDN at all. Get out!
|
||||||
None => bail!(DbError::BadValuePair(format!("{}", value), value_type)),
|
None => bail!(DbErrorKind::BadValuePair(format!("{}", value), value_type)),
|
||||||
Some(typed_value) => match (value_type, typed_value) {
|
Some(typed_value) => match (value_type, typed_value) {
|
||||||
// Most types don't coerce at all.
|
// Most types don't coerce at all.
|
||||||
(ValueType::Boolean, tv @ TypedValue::Boolean(_)) => Ok(tv),
|
(ValueType::Boolean, tv @ TypedValue::Boolean(_)) => Ok(tv),
|
||||||
|
@ -318,42 +362,41 @@ impl SchemaTypeChecking for Schema {
|
||||||
(ValueType::Uuid, tv @ TypedValue::Uuid(_)) => Ok(tv),
|
(ValueType::Uuid, tv @ TypedValue::Uuid(_)) => Ok(tv),
|
||||||
(ValueType::Instant, tv @ TypedValue::Instant(_)) => Ok(tv),
|
(ValueType::Instant, tv @ TypedValue::Instant(_)) => Ok(tv),
|
||||||
(ValueType::Keyword, tv @ TypedValue::Keyword(_)) => Ok(tv),
|
(ValueType::Keyword, tv @ TypedValue::Keyword(_)) => Ok(tv),
|
||||||
|
(ValueType::Bytes, tv @ TypedValue::Bytes(_)) => Ok(tv),
|
||||||
// Ref coerces a little: we interpret some things depending on the schema as a Ref.
|
// Ref coerces a little: we interpret some things depending on the schema as a Ref.
|
||||||
(ValueType::Ref, TypedValue::Long(x)) => Ok(TypedValue::Ref(x)),
|
(ValueType::Ref, TypedValue::Long(x)) => Ok(TypedValue::Ref(x)),
|
||||||
(ValueType::Ref, TypedValue::Keyword(ref x)) => self.require_entid(&x).map(|entid| entid.into()),
|
(ValueType::Ref, TypedValue::Keyword(ref x)) => {
|
||||||
|
self.require_entid(&x).map(|entid| entid.into())
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise, we have a type mismatch.
|
// Otherwise, we have a type mismatch.
|
||||||
// Enumerate all of the types here to allow the compiler to help us.
|
// Enumerate all of the types here to allow the compiler to help us.
|
||||||
// We don't enumerate all `TypedValue` cases, though: that would multiply this
|
// We don't enumerate all `TypedValue` cases, though: that would multiply this
|
||||||
// collection by 8!
|
// collection by 8!
|
||||||
(vt @ ValueType::Boolean, _) |
|
(vt @ ValueType::Boolean, _)
|
||||||
(vt @ ValueType::Long, _) |
|
| (vt @ ValueType::Long, _)
|
||||||
(vt @ ValueType::Double, _) |
|
| (vt @ ValueType::Double, _)
|
||||||
(vt @ ValueType::String, _) |
|
| (vt @ ValueType::String, _)
|
||||||
(vt @ ValueType::Uuid, _) |
|
| (vt @ ValueType::Uuid, _)
|
||||||
(vt @ ValueType::Instant, _) |
|
| (vt @ ValueType::Instant, _)
|
||||||
(vt @ ValueType::Keyword, _) |
|
| (vt @ ValueType::Keyword, _)
|
||||||
(vt @ ValueType::Ref, _)
|
| (vt @ ValueType::Bytes, _)
|
||||||
=> bail!(DbError::BadValuePair(format!("{}", value), vt)),
|
| (vt @ ValueType::Ref, _) => {
|
||||||
}
|
bail!(DbErrorKind::BadValuePair(format!("{}", value), vt))
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
|
||||||
use self::edn::Keyword;
|
use self::edn::Keyword;
|
||||||
|
use super::*;
|
||||||
|
|
||||||
fn add_attribute(schema: &mut Schema,
|
fn add_attribute(schema: &mut Schema, ident: Keyword, entid: Entid, attribute: Attribute) {
|
||||||
ident: Keyword,
|
|
||||||
entid: Entid,
|
|
||||||
attribute: Attribute) {
|
|
||||||
|
|
||||||
schema.entid_map.insert(entid, ident.clone());
|
schema.entid_map.insert(entid, ident.clone());
|
||||||
schema.ident_map.insert(ident.clone(), entid);
|
schema.ident_map.insert(ident, entid);
|
||||||
|
|
||||||
if attribute.component {
|
if attribute.component {
|
||||||
schema.component_attributes.push(entid);
|
schema.component_attributes.push(entid);
|
||||||
|
@ -366,55 +409,80 @@ mod test {
|
||||||
fn validate_attribute_map_success() {
|
fn validate_attribute_map_success() {
|
||||||
let mut schema = Schema::default();
|
let mut schema = Schema::default();
|
||||||
// attribute that is not an index has no uniqueness
|
// attribute that is not an index has no uniqueness
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bar"), 97, Attribute {
|
add_attribute(
|
||||||
index: false,
|
&mut schema,
|
||||||
value_type: ValueType::Boolean,
|
Keyword::namespaced("foo", "bar"),
|
||||||
fulltext: false,
|
97,
|
||||||
unique: None,
|
Attribute {
|
||||||
multival: false,
|
index: false,
|
||||||
component: false,
|
value_type: ValueType::Boolean,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: None,
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
// attribute is unique by value and an index
|
// attribute is unique by value and an index
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "baz"), 98, Attribute {
|
add_attribute(
|
||||||
index: true,
|
&mut schema,
|
||||||
value_type: ValueType::Long,
|
Keyword::namespaced("foo", "baz"),
|
||||||
fulltext: false,
|
98,
|
||||||
unique: Some(attribute::Unique::Value),
|
Attribute {
|
||||||
multival: false,
|
index: true,
|
||||||
component: false,
|
value_type: ValueType::Long,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: Some(attribute::Unique::Value),
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
// attribue is unique by identity and an index
|
// attribue is unique by identity and an index
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bat"), 99, Attribute {
|
add_attribute(
|
||||||
index: true,
|
&mut schema,
|
||||||
value_type: ValueType::Ref,
|
Keyword::namespaced("foo", "bat"),
|
||||||
fulltext: false,
|
99,
|
||||||
unique: Some(attribute::Unique::Identity),
|
Attribute {
|
||||||
multival: false,
|
index: true,
|
||||||
component: false,
|
value_type: ValueType::Ref,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: Some(attribute::Unique::Identity),
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
// attribute is a components and a `Ref`
|
// attribute is a components and a `Ref`
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bak"), 100, Attribute {
|
add_attribute(
|
||||||
index: false,
|
&mut schema,
|
||||||
value_type: ValueType::Ref,
|
Keyword::namespaced("foo", "bak"),
|
||||||
fulltext: false,
|
100,
|
||||||
unique: None,
|
Attribute {
|
||||||
multival: false,
|
index: false,
|
||||||
component: true,
|
value_type: ValueType::Ref,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: None,
|
||||||
|
multival: false,
|
||||||
|
component: true,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
// fulltext attribute is a string and an index
|
// fulltext attribute is a string and an index
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bap"), 101, Attribute {
|
add_attribute(
|
||||||
index: true,
|
&mut schema,
|
||||||
value_type: ValueType::String,
|
Keyword::namespaced("foo", "bap"),
|
||||||
fulltext: true,
|
101,
|
||||||
unique: None,
|
Attribute {
|
||||||
multival: false,
|
index: true,
|
||||||
component: false,
|
value_type: ValueType::String,
|
||||||
no_history: false,
|
fulltext: true,
|
||||||
});
|
unique: None,
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
assert!(validate_attribute_map(&schema.entid_map, &schema.attribute_map).is_ok());
|
assert!(validate_attribute_map(&schema.entid_map, &schema.attribute_map).is_ok());
|
||||||
}
|
}
|
||||||
|
@ -424,113 +492,150 @@ mod test {
|
||||||
let mut schema = Schema::default();
|
let mut schema = Schema::default();
|
||||||
// attribute unique by value but not index
|
// attribute unique by value but not index
|
||||||
let ident = Keyword::namespaced("foo", "bar");
|
let ident = Keyword::namespaced("foo", "bar");
|
||||||
add_attribute(&mut schema, ident , 99, Attribute {
|
add_attribute(
|
||||||
index: false,
|
&mut schema,
|
||||||
value_type: ValueType::Boolean,
|
ident,
|
||||||
fulltext: false,
|
99,
|
||||||
unique: Some(attribute::Unique::Value),
|
Attribute {
|
||||||
multival: false,
|
index: false,
|
||||||
component: false,
|
value_type: ValueType::Boolean,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: Some(attribute::Unique::Value),
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map).err();
|
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map)
|
||||||
assert!(err.is_some());
|
.err()
|
||||||
|
.map(|e| e.kind());
|
||||||
match err.unwrap().downcast() {
|
assert_eq!(
|
||||||
Ok(DbError::BadSchemaAssertion(message)) => { assert_eq!(message, ":db/unique :db/unique_value without :db/index true for entid: :foo/bar"); },
|
err,
|
||||||
x => panic!("expected Bad Schema Assertion error, got {:?}", x),
|
Some(DbErrorKind::BadSchemaAssertion(
|
||||||
}
|
":db/unique :db/unique_value without :db/index true for entid: :foo/bar".into()
|
||||||
|
))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invalid_schema_unique_identity_not_index() {
|
fn invalid_schema_unique_identity_not_index() {
|
||||||
let mut schema = Schema::default();
|
let mut schema = Schema::default();
|
||||||
// attribute is unique by identity but not index
|
// attribute is unique by identity but not index
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bar"), 99, Attribute {
|
add_attribute(
|
||||||
index: false,
|
&mut schema,
|
||||||
value_type: ValueType::Long,
|
Keyword::namespaced("foo", "bar"),
|
||||||
fulltext: false,
|
99,
|
||||||
unique: Some(attribute::Unique::Identity),
|
Attribute {
|
||||||
multival: false,
|
index: false,
|
||||||
component: false,
|
value_type: ValueType::Long,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: Some(attribute::Unique::Identity),
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map).err();
|
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map)
|
||||||
assert!(err.is_some());
|
.err()
|
||||||
|
.map(|e| e.kind());
|
||||||
match err.unwrap().downcast() {
|
assert_eq!(
|
||||||
Ok(DbError::BadSchemaAssertion(message)) => { assert_eq!(message, ":db/unique :db/unique_identity without :db/index true for entid: :foo/bar"); },
|
err,
|
||||||
x => panic!("expected Bad Schema Assertion error, got {:?}", x),
|
Some(DbErrorKind::BadSchemaAssertion(
|
||||||
}
|
":db/unique :db/unique_identity without :db/index true for entid: :foo/bar".into()
|
||||||
|
))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invalid_schema_component_not_ref() {
|
fn invalid_schema_component_not_ref() {
|
||||||
let mut schema = Schema::default();
|
let mut schema = Schema::default();
|
||||||
// attribute that is a component is not a `Ref`
|
// attribute that is a component is not a `Ref`
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bar"), 99, Attribute {
|
add_attribute(
|
||||||
index: false,
|
&mut schema,
|
||||||
value_type: ValueType::Boolean,
|
Keyword::namespaced("foo", "bar"),
|
||||||
fulltext: false,
|
99,
|
||||||
unique: None,
|
Attribute {
|
||||||
multival: false,
|
index: false,
|
||||||
component: true,
|
value_type: ValueType::Boolean,
|
||||||
no_history: false,
|
fulltext: false,
|
||||||
});
|
unique: None,
|
||||||
|
multival: false,
|
||||||
|
component: true,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map).err();
|
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map)
|
||||||
assert!(err.is_some());
|
.err()
|
||||||
|
.map(|e| e.kind());
|
||||||
match err.unwrap().downcast() {
|
assert_eq!(
|
||||||
Ok(DbError::BadSchemaAssertion(message)) => { assert_eq!(message, ":db/isComponent true without :db/valueType :db.type/ref for entid: :foo/bar"); },
|
err,
|
||||||
x => panic!("expected Bad Schema Assertion error, got {:?}", x),
|
Some(DbErrorKind::BadSchemaAssertion(
|
||||||
}
|
":db/isComponent true without :db/valueType :db.type/ref for entid: :foo/bar"
|
||||||
|
.into()
|
||||||
|
))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn invalid_schema_fulltext_not_index() {
|
fn invalid_schema_fulltext_not_index() {
|
||||||
let mut schema = Schema::default();
|
let mut schema = Schema::default();
|
||||||
// attribute that is fulltext is not an index
|
// attribute that is fulltext is not an index
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bar"), 99, Attribute {
|
add_attribute(
|
||||||
index: false,
|
&mut schema,
|
||||||
value_type: ValueType::String,
|
Keyword::namespaced("foo", "bar"),
|
||||||
fulltext: true,
|
99,
|
||||||
unique: None,
|
Attribute {
|
||||||
multival: false,
|
index: false,
|
||||||
component: false,
|
value_type: ValueType::String,
|
||||||
no_history: false,
|
fulltext: true,
|
||||||
});
|
unique: None,
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map).err();
|
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map)
|
||||||
assert!(err.is_some());
|
.err()
|
||||||
|
.map(|e| e.kind());
|
||||||
match err.unwrap().downcast() {
|
assert_eq!(
|
||||||
Ok(DbError::BadSchemaAssertion(message)) => { assert_eq!(message, ":db/fulltext true without :db/index true for entid: :foo/bar"); },
|
err,
|
||||||
x => panic!("expected Bad Schema Assertion error, got {:?}", x),
|
Some(DbErrorKind::BadSchemaAssertion(
|
||||||
}
|
":db/fulltext true without :db/index true for entid: :foo/bar".into()
|
||||||
|
))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn invalid_schema_fulltext_index_not_string() {
|
fn invalid_schema_fulltext_index_not_string() {
|
||||||
let mut schema = Schema::default();
|
let mut schema = Schema::default();
|
||||||
// attribute that is fulltext and not a `String`
|
// attribute that is fulltext and not a `String`
|
||||||
add_attribute(&mut schema, Keyword::namespaced("foo", "bar"), 99, Attribute {
|
add_attribute(
|
||||||
index: true,
|
&mut schema,
|
||||||
value_type: ValueType::Long,
|
Keyword::namespaced("foo", "bar"),
|
||||||
fulltext: true,
|
99,
|
||||||
unique: None,
|
Attribute {
|
||||||
multival: false,
|
index: true,
|
||||||
component: false,
|
value_type: ValueType::Long,
|
||||||
no_history: false,
|
fulltext: true,
|
||||||
});
|
unique: None,
|
||||||
|
multival: false,
|
||||||
|
component: false,
|
||||||
|
no_history: false,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map).err();
|
let err = validate_attribute_map(&schema.entid_map, &schema.attribute_map)
|
||||||
assert!(err.is_some());
|
.err()
|
||||||
|
.map(|e| e.kind());
|
||||||
match err.unwrap().downcast() {
|
assert_eq!(
|
||||||
Ok(DbError::BadSchemaAssertion(message)) => { assert_eq!(message, ":db/fulltext true without :db/valueType :db.type/string for entid: :foo/bar"); },
|
err,
|
||||||
x => panic!("expected Bad Schema Assertion error, got {:?}", x),
|
Some(DbErrorKind::BadSchemaAssertion(
|
||||||
}
|
":db/fulltext true without :db/valueType :db.type/string for entid: :foo/bar"
|
||||||
|
.into()
|
||||||
|
))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
862
db/src/timelines.rs
Normal file
862
db/src/timelines.rs
Normal file
|
@ -0,0 +1,862 @@
|
||||||
|
// Copyright 2016 Mozilla
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
||||||
|
// this file except in compliance with the License. You may obtain a copy of the
|
||||||
|
// License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed
|
||||||
|
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
|
use std::ops::RangeFrom;
|
||||||
|
|
||||||
|
use rusqlite::{self, params_from_iter};
|
||||||
|
|
||||||
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
|
|
||||||
|
use core_traits::{Entid, KnownEntid, TypedValue};
|
||||||
|
|
||||||
|
use mentat_core::Schema;
|
||||||
|
|
||||||
|
use edn::InternSet;
|
||||||
|
|
||||||
|
use edn::entities::OpType;
|
||||||
|
|
||||||
|
use crate::db;
|
||||||
|
use crate::db::TypedSQLValue;
|
||||||
|
|
||||||
|
use crate::tx::{transact_terms_with_action, TransactorAction};
|
||||||
|
|
||||||
|
use crate::types::PartitionMap;
|
||||||
|
|
||||||
|
use crate::internal_types::{Term, TermWithoutTempIds};
|
||||||
|
|
||||||
|
use crate::watcher::NullWatcher;
|
||||||
|
|
||||||
|
/// Collects a supplied tx range into an DESC ordered Vec of valid txs,
|
||||||
|
/// ensuring they all belong to the same timeline.
|
||||||
|
fn collect_ordered_txs_to_move(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
txs_from: RangeFrom<Entid>,
|
||||||
|
timeline: Entid,
|
||||||
|
) -> Result<Vec<Entid>> {
|
||||||
|
let mut stmt = conn.prepare("SELECT tx, timeline FROM timelined_transactions WHERE tx >= ? AND timeline = ? GROUP BY tx ORDER BY tx DESC")?;
|
||||||
|
let mut rows = stmt.query_and_then(
|
||||||
|
&[&txs_from.start, &timeline],
|
||||||
|
|row: &rusqlite::Row| -> Result<(Entid, Entid)> { Ok((row.get(0)?, row.get(1)?)) },
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let mut txs = vec![];
|
||||||
|
|
||||||
|
// TODO do this in SQL instead?
|
||||||
|
let timeline = match rows.next() {
|
||||||
|
Some(t) => {
|
||||||
|
let t = t?;
|
||||||
|
txs.push(t.0);
|
||||||
|
t.1
|
||||||
|
}
|
||||||
|
None => bail!(DbErrorKind::TimelinesInvalidRange),
|
||||||
|
};
|
||||||
|
|
||||||
|
for t in rows {
|
||||||
|
let t = t?;
|
||||||
|
txs.push(t.0);
|
||||||
|
if t.1 != timeline {
|
||||||
|
bail!(DbErrorKind::TimelinesMixed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(txs)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn move_transactions_to(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
tx_ids: &[Entid],
|
||||||
|
new_timeline: Entid,
|
||||||
|
) -> Result<()> {
|
||||||
|
// Move specified transactions over to a specified timeline.
|
||||||
|
conn.execute(
|
||||||
|
&format!(
|
||||||
|
"UPDATE timelined_transactions SET timeline = {} WHERE tx IN {}",
|
||||||
|
new_timeline,
|
||||||
|
crate::repeat_values(tx_ids.len(), 1)
|
||||||
|
),
|
||||||
|
params_from_iter(tx_ids.iter()),
|
||||||
|
)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn remove_tx_from_datoms(conn: &rusqlite::Connection, tx_id: Entid) -> Result<()> {
|
||||||
|
conn.execute("DELETE FROM datoms WHERE e = ?", &[&tx_id])?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_timeline_empty(conn: &rusqlite::Connection, timeline: Entid) -> Result<bool> {
|
||||||
|
let mut stmt = conn.prepare(
|
||||||
|
"SELECT timeline FROM timelined_transactions WHERE timeline = ? GROUP BY timeline",
|
||||||
|
)?;
|
||||||
|
let rows = stmt.query_and_then(&[&timeline], |row| -> Result<i64> { Ok(row.get(0)?) })?;
|
||||||
|
Ok(rows.count() == 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get terms for tx_id, reversing them in meaning (swap add & retract).
|
||||||
|
fn reversed_terms_for(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
tx_id: Entid,
|
||||||
|
) -> Result<Vec<TermWithoutTempIds>> {
|
||||||
|
let mut stmt = conn.prepare("SELECT e, a, v, value_type_tag, tx, added FROM timelined_transactions WHERE tx = ? AND timeline = ? ORDER BY tx DESC")?;
|
||||||
|
let rows = stmt.query_and_then(
|
||||||
|
&[&tx_id, &crate::TIMELINE_MAIN],
|
||||||
|
|row| -> Result<TermWithoutTempIds> {
|
||||||
|
let op = if row.get(5)? {
|
||||||
|
OpType::Retract
|
||||||
|
} else {
|
||||||
|
OpType::Add
|
||||||
|
};
|
||||||
|
Ok(Term::AddOrRetract(
|
||||||
|
op,
|
||||||
|
KnownEntid(row.get(0)?),
|
||||||
|
row.get(1)?,
|
||||||
|
TypedValue::from_sql_value_pair(row.get(2)?, row.get(3)?)?,
|
||||||
|
))
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let mut terms = vec![];
|
||||||
|
|
||||||
|
for row in rows {
|
||||||
|
terms.push(row?);
|
||||||
|
}
|
||||||
|
Ok(terms)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Move specified transaction RangeFrom off of main timeline.
|
||||||
|
pub fn move_from_main_timeline(
|
||||||
|
conn: &rusqlite::Connection,
|
||||||
|
schema: &Schema,
|
||||||
|
partition_map: PartitionMap,
|
||||||
|
txs_from: RangeFrom<Entid>,
|
||||||
|
new_timeline: Entid,
|
||||||
|
) -> Result<(Option<Schema>, PartitionMap)> {
|
||||||
|
if new_timeline == crate::TIMELINE_MAIN {
|
||||||
|
bail!(DbErrorKind::NotYetImplemented(
|
||||||
|
"Can't move transactions to main timeline".to_string()
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// We don't currently ensure that moving transactions onto a non-empty timeline
|
||||||
|
// will result in sensible end-state for that timeline.
|
||||||
|
// Let's remove that foot gun by prohibiting moving transactions to a non-empty timeline.
|
||||||
|
if !is_timeline_empty(conn, new_timeline)? {
|
||||||
|
bail!(DbErrorKind::TimelinesMoveToNonEmpty);
|
||||||
|
}
|
||||||
|
|
||||||
|
let txs_to_move = collect_ordered_txs_to_move(conn, txs_from, crate::TIMELINE_MAIN)?;
|
||||||
|
|
||||||
|
let mut last_schema = None;
|
||||||
|
for tx_id in &txs_to_move {
|
||||||
|
let reversed_terms = reversed_terms_for(conn, *tx_id)?;
|
||||||
|
|
||||||
|
// Rewind schema and datoms.
|
||||||
|
let (report, _, new_schema, _) = transact_terms_with_action(
|
||||||
|
conn,
|
||||||
|
partition_map.clone(),
|
||||||
|
schema,
|
||||||
|
schema,
|
||||||
|
NullWatcher(),
|
||||||
|
reversed_terms.into_iter().map(|t| t.rewrap()),
|
||||||
|
InternSet::new(),
|
||||||
|
TransactorAction::Materialize,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
// Rewind operation generated a 'tx' and a 'txInstant' assertion, which got
|
||||||
|
// inserted into the 'datoms' table (due to TransactorAction::Materialize).
|
||||||
|
// This is problematic. If we transact a few more times, the transactor will
|
||||||
|
// generate the same 'tx', but with a different 'txInstant'.
|
||||||
|
// The end result will be a transaction which has a phantom
|
||||||
|
// retraction of a txInstant, since transactor operates against the state of
|
||||||
|
// 'datoms', and not against the 'transactions' table.
|
||||||
|
// A quick workaround is to just remove the bad txInstant datom.
|
||||||
|
// See test_clashing_tx_instants test case.
|
||||||
|
remove_tx_from_datoms(conn, report.tx_id)?;
|
||||||
|
last_schema = new_schema;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move transactions over to the target timeline.
|
||||||
|
move_transactions_to(conn, &txs_to_move, new_timeline)?;
|
||||||
|
|
||||||
|
Ok((last_schema, db::read_partition_map(conn)?))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
use edn;
|
||||||
|
|
||||||
|
use std::borrow::Borrow;
|
||||||
|
|
||||||
|
use crate::debug::TestConn;
|
||||||
|
|
||||||
|
use crate::bootstrap;
|
||||||
|
|
||||||
|
// For convenience during testing.
|
||||||
|
// Real consumers will perform similar operations when appropriate.
|
||||||
|
fn update_conn(conn: &mut TestConn, schema: &Option<Schema>, pmap: &PartitionMap) {
|
||||||
|
match schema {
|
||||||
|
Some(ref s) => conn.schema = s.clone(),
|
||||||
|
None => (),
|
||||||
|
};
|
||||||
|
conn.partition_map = pmap.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_pop_simple() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let t = r#"
|
||||||
|
[{:db/id :db/doc :db/doc "test"}]
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let partition_map0 = conn.partition_map.clone();
|
||||||
|
|
||||||
|
let report1 = assert_transact!(conn, t);
|
||||||
|
let partition_map1 = conn.partition_map.clone();
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
conn.last_tx_id()..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved single tx");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
assert_eq!(new_partition_map, partition_map0);
|
||||||
|
|
||||||
|
conn.partition_map = partition_map0;
|
||||||
|
let report2 = assert_transact!(conn, t);
|
||||||
|
let partition_map2 = conn.partition_map.clone();
|
||||||
|
|
||||||
|
// Ensure that we can't move transactions to a non-empty timeline:
|
||||||
|
move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
conn.last_tx_id()..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect_err("Can't move transactions to a non-empty timeline");
|
||||||
|
|
||||||
|
assert_eq!(report1.tx_id, report2.tx_id);
|
||||||
|
assert_eq!(partition_map1, partition_map2);
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
r#"
|
||||||
|
[[37 :db/doc "test"]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
r#"
|
||||||
|
[[[37 :db/doc "test" ?tx true]
|
||||||
|
[?tx :db/txInstant ?ms ?tx true]]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_pop_ident() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let t = r#"
|
||||||
|
[{:db/ident :test/entid :db/doc "test" :db.schema/version 1}]
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let partition_map0 = conn.partition_map.clone();
|
||||||
|
let schema0 = conn.schema.clone();
|
||||||
|
|
||||||
|
let report1 = assert_transact!(conn, t);
|
||||||
|
let partition_map1 = conn.partition_map.clone();
|
||||||
|
let schema1 = conn.schema.clone();
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
conn.last_tx_id()..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved single tx");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
assert_eq!(conn.partition_map, partition_map0);
|
||||||
|
assert_eq!(conn.schema, schema0);
|
||||||
|
|
||||||
|
let report2 = assert_transact!(conn, t);
|
||||||
|
|
||||||
|
assert_eq!(report1.tx_id, report2.tx_id);
|
||||||
|
assert_eq!(conn.partition_map, partition_map1);
|
||||||
|
assert_eq!(conn.schema, schema1);
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
r#"
|
||||||
|
[[?e :db/ident :test/entid]
|
||||||
|
[?e :db/doc "test"]
|
||||||
|
[?e :db.schema/version 1]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
r#"
|
||||||
|
[[[?e :db/ident :test/entid ?tx true]
|
||||||
|
[?e :db/doc "test" ?tx true]
|
||||||
|
[?e :db.schema/version 1 ?tx true]
|
||||||
|
[?tx :db/txInstant ?ms ?tx true]]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_clashing_tx_instants() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
// Transact a basic schema.
|
||||||
|
assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"
|
||||||
|
[{:db/ident :person/name :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/identity :db/index true}]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
|
||||||
|
// Make an assertion against our schema.
|
||||||
|
assert_transact!(conn, r#"[{:person/name "Vanya"}]"#);
|
||||||
|
|
||||||
|
// Move that assertion away from the main timeline.
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
conn.last_tx_id()..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved single tx");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
// Assert that our datoms are now just the schema.
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
"
|
||||||
|
[[?e :db/ident :person/name]
|
||||||
|
[?e :db/valueType :db.type/string]
|
||||||
|
[?e :db/cardinality :db.cardinality/one]
|
||||||
|
[?e :db/unique :db.unique/identity]
|
||||||
|
[?e :db/index true]]"
|
||||||
|
);
|
||||||
|
// Same for transactions.
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
"
|
||||||
|
[[[?e :db/ident :person/name ?tx true]
|
||||||
|
[?e :db/valueType :db.type/string ?tx true]
|
||||||
|
[?e :db/cardinality :db.cardinality/one ?tx true]
|
||||||
|
[?e :db/unique :db.unique/identity ?tx true]
|
||||||
|
[?e :db/index true ?tx true]
|
||||||
|
[?tx :db/txInstant ?ms ?tx true]]]"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Re-assert our initial fact against our schema.
|
||||||
|
assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"
|
||||||
|
[[:db/add "tempid" :person/name "Vanya"]]"#
|
||||||
|
);
|
||||||
|
|
||||||
|
// Now, change that fact. This is the "clashing" transaction, if we're
|
||||||
|
// performing a timeline move using the transactor.
|
||||||
|
assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"
|
||||||
|
[[:db/add (lookup-ref :person/name "Vanya") :person/name "Ivan"]]"#
|
||||||
|
);
|
||||||
|
|
||||||
|
// Assert that our datoms are now the schema and the final assertion.
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
r#"
|
||||||
|
[[?e1 :db/ident :person/name]
|
||||||
|
[?e1 :db/valueType :db.type/string]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one]
|
||||||
|
[?e1 :db/unique :db.unique/identity]
|
||||||
|
[?e1 :db/index true]
|
||||||
|
[?e2 :person/name "Ivan"]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
|
||||||
|
// Assert that we have three correct looking transactions.
|
||||||
|
// This will fail if we're not cleaning up the 'datoms' table
|
||||||
|
// after the timeline move.
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
r#"
|
||||||
|
[[
|
||||||
|
[?e1 :db/ident :person/name ?tx1 true]
|
||||||
|
[?e1 :db/valueType :db.type/string ?tx1 true]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one ?tx1 true]
|
||||||
|
[?e1 :db/unique :db.unique/identity ?tx1 true]
|
||||||
|
[?e1 :db/index true ?tx1 true]
|
||||||
|
[?tx1 :db/txInstant ?ms1 ?tx1 true]
|
||||||
|
]
|
||||||
|
[
|
||||||
|
[?e2 :person/name "Vanya" ?tx2 true]
|
||||||
|
[?tx2 :db/txInstant ?ms2 ?tx2 true]
|
||||||
|
]
|
||||||
|
[
|
||||||
|
[?e2 :person/name "Ivan" ?tx3 true]
|
||||||
|
[?e2 :person/name "Vanya" ?tx3 false]
|
||||||
|
[?tx3 :db/txInstant ?ms3 ?tx3 true]
|
||||||
|
]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_pop_schema() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let t = r#"
|
||||||
|
[{:db/id "e" :db/ident :test/one :db/valueType :db.type/long :db/cardinality :db.cardinality/one}
|
||||||
|
{:db/id "f" :db/ident :test/many :db/valueType :db.type/long :db/cardinality :db.cardinality/many}]
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let partition_map0 = conn.partition_map.clone();
|
||||||
|
let schema0 = conn.schema.clone();
|
||||||
|
|
||||||
|
let report1 = assert_transact!(conn, t);
|
||||||
|
let partition_map1 = conn.partition_map.clone();
|
||||||
|
let schema1 = conn.schema.clone();
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
report1.tx_id..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved single tx");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
assert_eq!(conn.partition_map, partition_map0);
|
||||||
|
assert_eq!(conn.schema, schema0);
|
||||||
|
|
||||||
|
let report2 = assert_transact!(conn, t);
|
||||||
|
let partition_map2 = conn.partition_map.clone();
|
||||||
|
let schema2 = conn.schema.clone();
|
||||||
|
|
||||||
|
assert_eq!(report1.tx_id, report2.tx_id);
|
||||||
|
assert_eq!(partition_map1, partition_map2);
|
||||||
|
assert_eq!(schema1, schema2);
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
r#"
|
||||||
|
[[?e1 :db/ident :test/one]
|
||||||
|
[?e1 :db/valueType :db.type/long]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one]
|
||||||
|
[?e2 :db/ident :test/many]
|
||||||
|
[?e2 :db/valueType :db.type/long]
|
||||||
|
[?e2 :db/cardinality :db.cardinality/many]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
r#"
|
||||||
|
[[[?e1 :db/ident :test/one ?tx1 true]
|
||||||
|
[?e1 :db/valueType :db.type/long ?tx1 true]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one ?tx1 true]
|
||||||
|
[?e2 :db/ident :test/many ?tx1 true]
|
||||||
|
[?e2 :db/valueType :db.type/long ?tx1 true]
|
||||||
|
[?e2 :db/cardinality :db.cardinality/many ?tx1 true]
|
||||||
|
[?tx1 :db/txInstant ?ms ?tx1 true]]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_pop_schema_all_attributes() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let t = r#"
|
||||||
|
[{
|
||||||
|
:db/id "e"
|
||||||
|
:db/ident :test/one
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/unique :db.unique/value
|
||||||
|
:db/index true
|
||||||
|
:db/fulltext true
|
||||||
|
}]
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let partition_map0 = conn.partition_map.clone();
|
||||||
|
let schema0 = conn.schema.clone();
|
||||||
|
|
||||||
|
let report1 = assert_transact!(conn, t);
|
||||||
|
let partition_map1 = conn.partition_map.clone();
|
||||||
|
let schema1 = conn.schema.clone();
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
report1.tx_id..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved single tx");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
assert_eq!(conn.partition_map, partition_map0);
|
||||||
|
assert_eq!(conn.schema, schema0);
|
||||||
|
|
||||||
|
let report2 = assert_transact!(conn, t);
|
||||||
|
let partition_map2 = conn.partition_map.clone();
|
||||||
|
let schema2 = conn.schema.clone();
|
||||||
|
|
||||||
|
assert_eq!(report1.tx_id, report2.tx_id);
|
||||||
|
assert_eq!(partition_map1, partition_map2);
|
||||||
|
assert_eq!(schema1, schema2);
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
r#"
|
||||||
|
[[?e1 :db/ident :test/one]
|
||||||
|
[?e1 :db/valueType :db.type/string]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one]
|
||||||
|
[?e1 :db/unique :db.unique/value]
|
||||||
|
[?e1 :db/index true]
|
||||||
|
[?e1 :db/fulltext true]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
r#"
|
||||||
|
[[[?e1 :db/ident :test/one ?tx1 true]
|
||||||
|
[?e1 :db/valueType :db.type/string ?tx1 true]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one ?tx1 true]
|
||||||
|
[?e1 :db/unique :db.unique/value ?tx1 true]
|
||||||
|
[?e1 :db/index true ?tx1 true]
|
||||||
|
[?e1 :db/fulltext true ?tx1 true]
|
||||||
|
[?tx1 :db/txInstant ?ms ?tx1 true]]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_pop_schema_all_attributes_component() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let t = r#"
|
||||||
|
[{
|
||||||
|
:db/id "e"
|
||||||
|
:db/ident :test/one
|
||||||
|
:db/valueType :db.type/ref
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/unique :db.unique/value
|
||||||
|
:db/index true
|
||||||
|
:db/isComponent true
|
||||||
|
}]
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let partition_map0 = conn.partition_map.clone();
|
||||||
|
let schema0 = conn.schema.clone();
|
||||||
|
|
||||||
|
let report1 = assert_transact!(conn, t);
|
||||||
|
let partition_map1 = conn.partition_map.clone();
|
||||||
|
let schema1 = conn.schema.clone();
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
report1.tx_id..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved single tx");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
assert_eq!(conn.partition_map, partition_map0);
|
||||||
|
|
||||||
|
// Assert all of schema's components individually, for some guidance in case of failures:
|
||||||
|
assert_eq!(conn.schema.entid_map, schema0.entid_map);
|
||||||
|
assert_eq!(conn.schema.ident_map, schema0.ident_map);
|
||||||
|
assert_eq!(conn.schema.attribute_map, schema0.attribute_map);
|
||||||
|
assert_eq!(
|
||||||
|
conn.schema.component_attributes,
|
||||||
|
schema0.component_attributes
|
||||||
|
);
|
||||||
|
// Assert the whole schema, just in case we missed something:
|
||||||
|
assert_eq!(conn.schema, schema0);
|
||||||
|
|
||||||
|
let report2 = assert_transact!(conn, t);
|
||||||
|
let partition_map2 = conn.partition_map.clone();
|
||||||
|
let schema2 = conn.schema.clone();
|
||||||
|
|
||||||
|
assert_eq!(report1.tx_id, report2.tx_id);
|
||||||
|
assert_eq!(partition_map1, partition_map2);
|
||||||
|
assert_eq!(schema1, schema2);
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.datoms(),
|
||||||
|
r#"
|
||||||
|
[[?e1 :db/ident :test/one]
|
||||||
|
[?e1 :db/valueType :db.type/ref]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one]
|
||||||
|
[?e1 :db/unique :db.unique/value]
|
||||||
|
[?e1 :db/isComponent true]
|
||||||
|
[?e1 :db/index true]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
assert_matches!(
|
||||||
|
conn.transactions(),
|
||||||
|
r#"
|
||||||
|
[[[?e1 :db/ident :test/one ?tx1 true]
|
||||||
|
[?e1 :db/valueType :db.type/ref ?tx1 true]
|
||||||
|
[?e1 :db/cardinality :db.cardinality/one ?tx1 true]
|
||||||
|
[?e1 :db/unique :db.unique/value ?tx1 true]
|
||||||
|
[?e1 :db/isComponent true ?tx1 true]
|
||||||
|
[?e1 :db/index true ?tx1 true]
|
||||||
|
[?tx1 :db/txInstant ?ms ?tx1 true]]]
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_pop_in_sequence() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let partition_map_after_bootstrap = conn.partition_map.clone();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
(65536..65538),
|
||||||
|
conn.partition_map.allocate_entids(":db.part/user", 2)
|
||||||
|
);
|
||||||
|
let tx_report0 = assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"[
|
||||||
|
{:db/id 65536 :db/ident :test/one :db/valueType :db.type/long :db/cardinality :db.cardinality/one :db/unique :db.unique/identity :db/index true}
|
||||||
|
{:db/id 65537 :db/ident :test/many :db/valueType :db.type/long :db/cardinality :db.cardinality/many}
|
||||||
|
]"#
|
||||||
|
);
|
||||||
|
|
||||||
|
let first = "[
|
||||||
|
[65536 :db/ident :test/one]
|
||||||
|
[65536 :db/valueType :db.type/long]
|
||||||
|
[65536 :db/cardinality :db.cardinality/one]
|
||||||
|
[65536 :db/unique :db.unique/identity]
|
||||||
|
[65536 :db/index true]
|
||||||
|
[65537 :db/ident :test/many]
|
||||||
|
[65537 :db/valueType :db.type/long]
|
||||||
|
[65537 :db/cardinality :db.cardinality/many]
|
||||||
|
]";
|
||||||
|
assert_matches!(conn.datoms(), first);
|
||||||
|
|
||||||
|
let partition_map0 = conn.partition_map.clone();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
(65538..65539),
|
||||||
|
conn.partition_map.allocate_entids(":db.part/user", 1)
|
||||||
|
);
|
||||||
|
let tx_report1 = assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"[
|
||||||
|
[:db/add 65538 :test/one 1]
|
||||||
|
[:db/add 65538 :test/many 2]
|
||||||
|
[:db/add 65538 :test/many 3]
|
||||||
|
]"#
|
||||||
|
);
|
||||||
|
let schema1 = conn.schema.clone();
|
||||||
|
let partition_map1 = conn.partition_map.clone();
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.last_transaction(),
|
||||||
|
"[[65538 :test/one 1 ?tx true]
|
||||||
|
[65538 :test/many 2 ?tx true]
|
||||||
|
[65538 :test/many 3 ?tx true]
|
||||||
|
[?tx :db/txInstant ?ms ?tx true]]"
|
||||||
|
);
|
||||||
|
|
||||||
|
let second = "[
|
||||||
|
[65536 :db/ident :test/one]
|
||||||
|
[65536 :db/valueType :db.type/long]
|
||||||
|
[65536 :db/cardinality :db.cardinality/one]
|
||||||
|
[65536 :db/unique :db.unique/identity]
|
||||||
|
[65536 :db/index true]
|
||||||
|
[65537 :db/ident :test/many]
|
||||||
|
[65537 :db/valueType :db.type/long]
|
||||||
|
[65537 :db/cardinality :db.cardinality/many]
|
||||||
|
[65538 :test/one 1]
|
||||||
|
[65538 :test/many 2]
|
||||||
|
[65538 :test/many 3]
|
||||||
|
]";
|
||||||
|
assert_matches!(conn.datoms(), second);
|
||||||
|
|
||||||
|
let tx_report2 = assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"[
|
||||||
|
[:db/add 65538 :test/one 2]
|
||||||
|
[:db/add 65538 :test/many 2]
|
||||||
|
[:db/retract 65538 :test/many 3]
|
||||||
|
[:db/add 65538 :test/many 4]
|
||||||
|
]"#
|
||||||
|
);
|
||||||
|
let schema2 = conn.schema.clone();
|
||||||
|
|
||||||
|
assert_matches!(
|
||||||
|
conn.last_transaction(),
|
||||||
|
"[[65538 :test/one 1 ?tx false]
|
||||||
|
[65538 :test/one 2 ?tx true]
|
||||||
|
[65538 :test/many 3 ?tx false]
|
||||||
|
[65538 :test/many 4 ?tx true]
|
||||||
|
[?tx :db/txInstant ?ms ?tx true]]"
|
||||||
|
);
|
||||||
|
|
||||||
|
let third = "[
|
||||||
|
[65536 :db/ident :test/one]
|
||||||
|
[65536 :db/valueType :db.type/long]
|
||||||
|
[65536 :db/cardinality :db.cardinality/one]
|
||||||
|
[65536 :db/unique :db.unique/identity]
|
||||||
|
[65536 :db/index true]
|
||||||
|
[65537 :db/ident :test/many]
|
||||||
|
[65537 :db/valueType :db.type/long]
|
||||||
|
[65537 :db/cardinality :db.cardinality/many]
|
||||||
|
[65538 :test/one 2]
|
||||||
|
[65538 :test/many 2]
|
||||||
|
[65538 :test/many 4]
|
||||||
|
]";
|
||||||
|
assert_matches!(conn.datoms(), third);
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
tx_report2.tx_id..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved timeline");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
assert_matches!(conn.datoms(), second);
|
||||||
|
// Moving didn't change the schema.
|
||||||
|
assert_eq!(None, new_schema);
|
||||||
|
assert_eq!(conn.schema, schema2);
|
||||||
|
// But it did change the partition map.
|
||||||
|
assert_eq!(conn.partition_map, partition_map1);
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
tx_report1.tx_id..,
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
.expect("moved timeline");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
assert_matches!(conn.datoms(), first);
|
||||||
|
assert_eq!(None, new_schema);
|
||||||
|
assert_eq!(schema1, conn.schema);
|
||||||
|
assert_eq!(conn.partition_map, partition_map0);
|
||||||
|
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
tx_report0.tx_id..,
|
||||||
|
3,
|
||||||
|
)
|
||||||
|
.expect("moved timeline");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
assert_eq!(true, new_schema.is_some());
|
||||||
|
assert_eq!(bootstrap::bootstrap_schema(), conn.schema);
|
||||||
|
assert_eq!(partition_map_after_bootstrap, conn.partition_map);
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_move_range() {
|
||||||
|
let mut conn = TestConn::default();
|
||||||
|
conn.sanitized_partition_map();
|
||||||
|
|
||||||
|
let partition_map_after_bootstrap = conn.partition_map.clone();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
(65536..65539),
|
||||||
|
conn.partition_map.allocate_entids(":db.part/user", 3)
|
||||||
|
);
|
||||||
|
let tx_report0 = assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"[
|
||||||
|
{:db/id 65536 :db/ident :test/one :db/valueType :db.type/long :db/cardinality :db.cardinality/one}
|
||||||
|
{:db/id 65537 :db/ident :test/many :db/valueType :db.type/long :db/cardinality :db.cardinality/many}
|
||||||
|
]"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"[
|
||||||
|
[:db/add 65538 :test/one 1]
|
||||||
|
[:db/add 65538 :test/many 2]
|
||||||
|
[:db/add 65538 :test/many 3]
|
||||||
|
]"#
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_transact!(
|
||||||
|
conn,
|
||||||
|
r#"[
|
||||||
|
[:db/add 65538 :test/one 2]
|
||||||
|
[:db/add 65538 :test/many 2]
|
||||||
|
[:db/retract 65538 :test/many 3]
|
||||||
|
[:db/add 65538 :test/many 4]
|
||||||
|
]"#
|
||||||
|
);
|
||||||
|
|
||||||
|
// Remove all of these transactions from the main timeline,
|
||||||
|
// ensure we get back to a "just bootstrapped" state.
|
||||||
|
let (new_schema, new_partition_map) = move_from_main_timeline(
|
||||||
|
&conn.sqlite,
|
||||||
|
&conn.schema,
|
||||||
|
conn.partition_map.clone(),
|
||||||
|
tx_report0.tx_id..,
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
.expect("moved timeline");
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
|
||||||
|
update_conn(&mut conn, &new_schema, &new_partition_map);
|
||||||
|
assert_eq!(true, new_schema.is_some());
|
||||||
|
assert_eq!(bootstrap::bootstrap_schema(), conn.schema);
|
||||||
|
assert_eq!(partition_map_after_bootstrap, conn.partition_map);
|
||||||
|
assert_matches!(conn.datoms(), "[]");
|
||||||
|
assert_matches!(conn.transactions(), "[]");
|
||||||
|
}
|
||||||
|
}
|
848
db/src/tx.rs
848
db/src/tx.rs
File diff suppressed because it is too large
Load diff
|
@ -8,24 +8,13 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
use std::collections::{
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
BTreeSet,
|
|
||||||
BTreeMap,
|
|
||||||
};
|
|
||||||
|
|
||||||
use mentat_core::{
|
use core_traits::{Entid, TypedValue, ValueType};
|
||||||
Entid,
|
|
||||||
TypedValue,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
|
|
||||||
use errors::{
|
use db_traits::errors::CardinalityConflict;
|
||||||
CardinalityConflict,
|
|
||||||
};
|
|
||||||
|
|
||||||
use internal_types::{
|
use crate::internal_types::AEVTrie;
|
||||||
AEVTrie,
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Map from found [e a v] to expected type.
|
/// Map from found [e a v] to expected type.
|
||||||
pub(crate) type TypeDisagreements = BTreeMap<(Entid, Entid, TypedValue), ValueType>;
|
pub(crate) type TypeDisagreements = BTreeMap<(Entid, Entid, TypedValue), ValueType>;
|
||||||
|
@ -63,7 +52,9 @@ pub(crate) fn type_disagreements<'schema>(aev_trie: &AEVTrie<'schema>) -> TypeDi
|
||||||
/// We try to be maximally helpful by yielding every malformed set of datoms, rather than just the
|
/// We try to be maximally helpful by yielding every malformed set of datoms, rather than just the
|
||||||
/// first set, or even the first conflict. In the future, we might change this choice, or allow the
|
/// first set, or even the first conflict. In the future, we might change this choice, or allow the
|
||||||
/// consumer to specify the robustness of the cardinality checking desired.
|
/// consumer to specify the robustness of the cardinality checking desired.
|
||||||
pub(crate) fn cardinality_conflicts<'schema>(aev_trie: &AEVTrie<'schema>) -> Vec<CardinalityConflict> {
|
pub(crate) fn cardinality_conflicts<'schema>(
|
||||||
|
aev_trie: &AEVTrie<'schema>,
|
||||||
|
) -> Vec<CardinalityConflict> {
|
||||||
let mut errors = vec![];
|
let mut errors = vec![];
|
||||||
|
|
||||||
for (&(a, attribute), evs) in aev_trie {
|
for (&(a, attribute), evs) in aev_trie {
|
||||||
|
|
|
@ -8,61 +8,51 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
use std::sync::{
|
use std::sync::{Arc, Weak};
|
||||||
Arc,
|
|
||||||
Weak,
|
|
||||||
};
|
|
||||||
|
|
||||||
use std::sync::mpsc::{
|
use std::sync::mpsc::{channel, Receiver, RecvError, Sender};
|
||||||
channel,
|
|
||||||
Receiver,
|
|
||||||
RecvError,
|
|
||||||
Sender,
|
|
||||||
};
|
|
||||||
|
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use indexmap::{
|
use indexmap::IndexMap;
|
||||||
IndexMap,
|
|
||||||
};
|
|
||||||
|
|
||||||
use mentat_core::{
|
use core_traits::{Entid, TypedValue};
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
TypedValue,
|
|
||||||
};
|
|
||||||
|
|
||||||
use edn::entities::{
|
use mentat_core::Schema;
|
||||||
OpType,
|
|
||||||
};
|
|
||||||
|
|
||||||
use errors::{
|
use edn::entities::OpType;
|
||||||
Result,
|
|
||||||
};
|
|
||||||
|
|
||||||
use types::{
|
use db_traits::errors::Result;
|
||||||
AttributeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
use watcher::TransactWatcher;
|
use crate::types::AttributeSet;
|
||||||
|
|
||||||
|
use crate::watcher::TransactWatcher;
|
||||||
|
|
||||||
pub struct TxObserver {
|
pub struct TxObserver {
|
||||||
notify_fn: Arc<Box<Fn(&str, IndexMap<&Entid, &AttributeSet>) + Send + Sync>>,
|
#[allow(clippy::type_complexity)]
|
||||||
|
notify_fn: Arc<Box<dyn Fn(&str, IndexMap<&Entid, &AttributeSet>) + Send + Sync>>,
|
||||||
attributes: AttributeSet,
|
attributes: AttributeSet,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TxObserver {
|
impl TxObserver {
|
||||||
pub fn new<F>(attributes: AttributeSet, notify_fn: F) -> TxObserver where F: Fn(&str, IndexMap<&Entid, &AttributeSet>) + 'static + Send + Sync {
|
pub fn new<F>(attributes: AttributeSet, notify_fn: F) -> TxObserver
|
||||||
|
where
|
||||||
|
F: Fn(&str, IndexMap<&Entid, &AttributeSet>) + 'static + Send + Sync,
|
||||||
|
{
|
||||||
TxObserver {
|
TxObserver {
|
||||||
notify_fn: Arc::new(Box::new(notify_fn)),
|
notify_fn: Arc::new(Box::new(notify_fn)),
|
||||||
attributes,
|
attributes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn applicable_reports<'r>(&self, reports: &'r IndexMap<Entid, AttributeSet>) -> IndexMap<&'r Entid, &'r AttributeSet> {
|
pub fn applicable_reports<'r>(
|
||||||
reports.into_iter()
|
&self,
|
||||||
.filter(|&(_txid, attrs)| !self.attributes.is_disjoint(attrs))
|
reports: &'r IndexMap<Entid, AttributeSet>,
|
||||||
.collect()
|
) -> IndexMap<&'r Entid, &'r AttributeSet> {
|
||||||
|
reports
|
||||||
|
.into_iter()
|
||||||
|
.filter(|&(_txid, attrs)| !self.attributes.is_disjoint(attrs))
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn notify(&self, key: &str, reports: IndexMap<&Entid, &AttributeSet>) {
|
fn notify(&self, key: &str, reports: IndexMap<&Entid, &AttributeSet>) {
|
||||||
|
@ -80,7 +70,10 @@ pub struct TxCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TxCommand {
|
impl TxCommand {
|
||||||
fn new(observers: &Arc<IndexMap<String, Arc<TxObserver>>>, reports: IndexMap<Entid, AttributeSet>) -> Self {
|
fn new(
|
||||||
|
observers: &Arc<IndexMap<String, Arc<TxObserver>>>,
|
||||||
|
reports: IndexMap<Entid, AttributeSet>,
|
||||||
|
) -> Self {
|
||||||
TxCommand {
|
TxCommand {
|
||||||
reports,
|
reports,
|
||||||
observers: Arc::downgrade(observers),
|
observers: Arc::downgrade(observers),
|
||||||
|
@ -90,20 +83,21 @@ impl TxCommand {
|
||||||
|
|
||||||
impl Command for TxCommand {
|
impl Command for TxCommand {
|
||||||
fn execute(&mut self) {
|
fn execute(&mut self) {
|
||||||
self.observers.upgrade().map(|observers| {
|
if let Some(observers) = self.observers.upgrade() {
|
||||||
for (key, observer) in observers.iter() {
|
for (key, observer) in observers.iter() {
|
||||||
let applicable_reports = observer.applicable_reports(&self.reports);
|
let applicable_reports = observer.applicable_reports(&self.reports);
|
||||||
if !applicable_reports.is_empty() {
|
if !applicable_reports.is_empty() {
|
||||||
observer.notify(&key, applicable_reports);
|
observer.notify(&key, applicable_reports);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct TxObservationService {
|
pub struct TxObservationService {
|
||||||
observers: Arc<IndexMap<String, Arc<TxObserver>>>,
|
observers: Arc<IndexMap<String, Arc<TxObserver>>>,
|
||||||
executor: Option<Sender<Box<Command + Send>>>,
|
executor: Option<Sender<Box<dyn Command + Send>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TxObservationService {
|
impl TxObservationService {
|
||||||
|
@ -115,7 +109,7 @@ impl TxObservationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
// For testing purposes
|
// For testing purposes
|
||||||
pub fn is_registered(&self, key: &String) -> bool {
|
pub fn is_registered(&self, key: &str) -> bool {
|
||||||
self.observers.contains_key(key)
|
self.observers.contains_key(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +117,7 @@ impl TxObservationService {
|
||||||
Arc::make_mut(&mut self.observers).insert(key, observer);
|
Arc::make_mut(&mut self.observers).insert(key, observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn deregister(&mut self, key: &String) {
|
pub fn deregister(&mut self, key: &str) {
|
||||||
Arc::make_mut(&mut self.observers).remove(key);
|
Arc::make_mut(&mut self.observers).remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,7 +132,11 @@ impl TxObservationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
let executor = self.executor.get_or_insert_with(|| {
|
let executor = self.executor.get_or_insert_with(|| {
|
||||||
let (tx, rx): (Sender<Box<Command + Send>>, Receiver<Box<Command + Send>>) = channel();
|
#[allow(clippy::type_complexity)]
|
||||||
|
let (tx, rx): (
|
||||||
|
Sender<Box<dyn Command + Send>>,
|
||||||
|
Receiver<Box<dyn Command + Send>>,
|
||||||
|
) = channel();
|
||||||
let mut worker = CommandExecutor::new(rx);
|
let mut worker = CommandExecutor::new(rx);
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
|
@ -159,6 +157,7 @@ impl Drop for TxObservationService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
pub struct InProgressObserverTransactWatcher {
|
pub struct InProgressObserverTransactWatcher {
|
||||||
collected_attributes: AttributeSet,
|
collected_attributes: AttributeSet,
|
||||||
pub txes: IndexMap<Entid, AttributeSet>,
|
pub txes: IndexMap<Entid, AttributeSet>,
|
||||||
|
@ -179,21 +178,19 @@ impl TransactWatcher for InProgressObserverTransactWatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn done(&mut self, t: &Entid, _schema: &Schema) -> Result<()> {
|
fn done(&mut self, t: &Entid, _schema: &Schema) -> Result<()> {
|
||||||
let collected_attributes = ::std::mem::replace(&mut self.collected_attributes, Default::default());
|
let collected_attributes = ::std::mem::take(&mut self.collected_attributes);
|
||||||
self.txes.insert(*t, collected_attributes);
|
self.txes.insert(*t, collected_attributes);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CommandExecutor {
|
struct CommandExecutor {
|
||||||
receiver: Receiver<Box<Command + Send>>,
|
receiver: Receiver<Box<dyn Command + Send>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CommandExecutor {
|
impl CommandExecutor {
|
||||||
fn new(rx: Receiver<Box<Command + Send>>) -> Self {
|
fn new(rx: Receiver<Box<dyn Command + Send>>) -> Self {
|
||||||
CommandExecutor {
|
CommandExecutor { receiver: rx }
|
||||||
receiver: rx,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main(&mut self) {
|
fn main(&mut self) {
|
||||||
|
@ -204,12 +201,10 @@ impl CommandExecutor {
|
||||||
// sync_channel) is disconnected, implying that no further messages will ever be
|
// sync_channel) is disconnected, implying that no further messages will ever be
|
||||||
// received."
|
// received."
|
||||||
// No need to log here.
|
// No need to log here.
|
||||||
return
|
return;
|
||||||
},
|
}
|
||||||
|
|
||||||
Ok(mut cmd) => {
|
Ok(mut cmd) => cmd.execute(),
|
||||||
cmd.execute()
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
202
db/src/types.rs
202
db/src/types.rs
|
@ -10,59 +10,110 @@
|
||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::{BTreeMap, BTreeSet, HashMap};
|
||||||
use std::collections::{
|
use std::iter::FromIterator;
|
||||||
BTreeMap,
|
use std::ops::{Deref, DerefMut, Range};
|
||||||
BTreeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
extern crate mentat_core;
|
extern crate mentat_core;
|
||||||
|
|
||||||
pub use self::mentat_core::{
|
use core_traits::{Entid, TypedValue, ValueType};
|
||||||
Attribute,
|
|
||||||
AttributeBitFlags,
|
|
||||||
DateTime,
|
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
TypedValue,
|
|
||||||
Utc,
|
|
||||||
ValueType,
|
|
||||||
};
|
|
||||||
|
|
||||||
use edn::entities::{
|
pub use self::mentat_core::{DateTime, Schema, Utc};
|
||||||
EntityPlace,
|
|
||||||
TempId,
|
|
||||||
};
|
|
||||||
|
|
||||||
use errors;
|
use edn::entities::{EntityPlace, TempId};
|
||||||
|
|
||||||
|
use db_traits::errors;
|
||||||
|
|
||||||
/// Represents one partition of the entid space.
|
/// Represents one partition of the entid space.
|
||||||
#[derive(Clone,Debug,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "syncable", derive(Serialize, Deserialize))]
|
||||||
pub struct Partition {
|
pub struct Partition {
|
||||||
/// The first entid in the partition.
|
/// The first entid in the partition.
|
||||||
pub start: i64,
|
pub start: Entid,
|
||||||
|
/// Maximum allowed entid in the partition.
|
||||||
|
pub end: Entid,
|
||||||
|
/// `true` if entids in the partition can be excised with `:db/excise`.
|
||||||
|
pub allow_excision: bool,
|
||||||
/// The next entid to be allocated in the partition.
|
/// The next entid to be allocated in the partition.
|
||||||
pub index: i64,
|
/// Unless you must use this directly, prefer using provided setter and getter helpers.
|
||||||
|
pub(crate) next_entid_to_allocate: Entid,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Partition {
|
impl Partition {
|
||||||
pub fn new(start: i64, next: i64) -> Partition {
|
pub fn new(
|
||||||
assert!(start <= next, "A partition represents a monotonic increasing sequence of entids.");
|
start: Entid,
|
||||||
Partition { start: start, index: next }
|
end: Entid,
|
||||||
|
next_entid_to_allocate: Entid,
|
||||||
|
allow_excision: bool,
|
||||||
|
) -> Partition {
|
||||||
|
assert!(
|
||||||
|
start <= next_entid_to_allocate && next_entid_to_allocate <= end,
|
||||||
|
"A partition represents a monotonic increasing sequence of entids."
|
||||||
|
);
|
||||||
|
Partition {
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
next_entid_to_allocate,
|
||||||
|
allow_excision,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contains_entid(&self, e: i64) -> bool {
|
pub fn contains_entid(&self, e: Entid) -> bool {
|
||||||
(e >= self.start) && (e < self.index)
|
(e >= self.start) && (e < self.next_entid_to_allocate)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn allows_entid(&self, e: Entid) -> bool {
|
||||||
|
(e >= self.start) && (e <= self.end)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn next_entid(&self) -> Entid {
|
||||||
|
self.next_entid_to_allocate
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_next_entid(&mut self, e: Entid) {
|
||||||
|
assert!(
|
||||||
|
self.allows_entid(e),
|
||||||
|
"Partition index must be within its allocated space."
|
||||||
|
);
|
||||||
|
self.next_entid_to_allocate = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn allocate_entids(&mut self, n: usize) -> Range<i64> {
|
||||||
|
let idx = self.next_entid();
|
||||||
|
self.set_next_entid(idx + n as i64);
|
||||||
|
idx..self.next_entid()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Map partition names to `Partition` instances.
|
/// Map partition names to `Partition` instances.
|
||||||
pub type PartitionMap = BTreeMap<String, Partition>;
|
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "syncable", derive(Serialize, Deserialize))]
|
||||||
|
pub struct PartitionMap(BTreeMap<String, Partition>);
|
||||||
|
|
||||||
|
impl Deref for PartitionMap {
|
||||||
|
type Target = BTreeMap<String, Partition>;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DerefMut for PartitionMap {
|
||||||
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||||
|
&mut self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromIterator<(String, Partition)> for PartitionMap {
|
||||||
|
fn from_iter<T: IntoIterator<Item = (String, Partition)>>(iter: T) -> Self {
|
||||||
|
PartitionMap(iter.into_iter().collect())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Represents the metadata required to query from, or apply transactions to, a Mentat store.
|
/// Represents the metadata required to query from, or apply transactions to, a Mentat store.
|
||||||
///
|
///
|
||||||
/// See https://github.com/mozilla/mentat/wiki/Thoughts:-modeling-db-conn-in-Rust.
|
/// See https://github.com/mozilla/mentat/wiki/Thoughts:-modeling-db-conn-in-Rust.
|
||||||
#[derive(Clone,Debug,Default,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
pub struct DB {
|
pub struct DB {
|
||||||
/// Map partition name->`Partition`.
|
/// Map partition name->`Partition`.
|
||||||
///
|
///
|
||||||
|
@ -76,8 +127,8 @@ pub struct DB {
|
||||||
impl DB {
|
impl DB {
|
||||||
pub fn new(partition_map: PartitionMap, schema: Schema) -> DB {
|
pub fn new(partition_map: PartitionMap, schema: Schema) -> DB {
|
||||||
DB {
|
DB {
|
||||||
partition_map: partition_map,
|
partition_map,
|
||||||
schema: schema
|
schema,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,6 +138,9 @@ impl DB {
|
||||||
/// Used to represent lookup-refs and [TEMPID a v] upserts as they are resolved.
|
/// Used to represent lookup-refs and [TEMPID a v] upserts as they are resolved.
|
||||||
pub type AVPair = (Entid, TypedValue);
|
pub type AVPair = (Entid, TypedValue);
|
||||||
|
|
||||||
|
/// Used to represent assertions and retractions.
|
||||||
|
pub(crate) type EAV = (Entid, Entid, TypedValue);
|
||||||
|
|
||||||
/// Map [a v] pairs to existing entids.
|
/// Map [a v] pairs to existing entids.
|
||||||
///
|
///
|
||||||
/// Used to resolve lookup-refs and upserts.
|
/// Used to resolve lookup-refs and upserts.
|
||||||
|
@ -95,30 +149,14 @@ pub type AVMap<'a> = HashMap<&'a AVPair, Entid>;
|
||||||
// represents a set of entids that are correspond to attributes
|
// represents a set of entids that are correspond to attributes
|
||||||
pub type AttributeSet = BTreeSet<Entid>;
|
pub type AttributeSet = BTreeSet<Entid>;
|
||||||
|
|
||||||
/// A transaction report summarizes an applied transaction.
|
|
||||||
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
|
||||||
pub struct TxReport {
|
|
||||||
/// The transaction ID of the transaction.
|
|
||||||
pub tx_id: Entid,
|
|
||||||
|
|
||||||
/// The timestamp when the transaction began to be committed.
|
|
||||||
pub tx_instant: DateTime<Utc>,
|
|
||||||
|
|
||||||
/// A map from string literal tempid to resolved or allocated entid.
|
|
||||||
///
|
|
||||||
/// Every string literal tempid presented to the transactor either resolves via upsert to an
|
|
||||||
/// existing entid, or is allocated a new entid. (It is possible for multiple distinct string
|
|
||||||
/// literal tempids to all unify to a single freshly allocated entid.)
|
|
||||||
pub tempids: BTreeMap<String, Entid>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The transactor is tied to `edn::ValueAndSpan` right now, but in the future we'd like to support
|
/// The transactor is tied to `edn::ValueAndSpan` right now, but in the future we'd like to support
|
||||||
/// `TypedValue` directly for programmatic use. `TransactableValue` encapsulates the interface
|
/// `TypedValue` directly for programmatic use. `TransactableValue` encapsulates the interface
|
||||||
/// value types (i.e., values in the value place) need to support to be transacted.
|
/// value types (i.e., values in the value place) need to support to be transacted.
|
||||||
pub trait TransactableValue: Clone {
|
pub trait TransactableValue: Clone {
|
||||||
/// Coerce this value place into the given type. This is where we perform schema-aware
|
/// Coerce this value place into the given type. This is where we perform schema-aware
|
||||||
/// coercion, for example coercing an integral value into a ref where appropriate.
|
/// coercion, for example coercing an integral value into a ref where appropriate.
|
||||||
fn into_typed_value(self, schema: &Schema, value_type: ValueType) -> errors::Result<TypedValue>;
|
fn into_typed_value(self, schema: &Schema, value_type: ValueType)
|
||||||
|
-> errors::Result<TypedValue>;
|
||||||
|
|
||||||
/// Make an entity place out of this value place. This is where we limit values in nested maps
|
/// Make an entity place out of this value place. This is where we limit values in nested maps
|
||||||
/// to valid entity places.
|
/// to valid entity places.
|
||||||
|
@ -126,3 +164,67 @@ pub trait TransactableValue: Clone {
|
||||||
|
|
||||||
fn as_tempid(&self) -> Option<TempId>;
|
fn as_tempid(&self) -> Option<TempId>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::Partition;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "A partition represents a monotonic increasing sequence of entids.")]
|
||||||
|
fn test_partition_limits_sanity1() {
|
||||||
|
Partition::new(100, 1000, 1001, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "A partition represents a monotonic increasing sequence of entids.")]
|
||||||
|
fn test_partition_limits_sanity2() {
|
||||||
|
Partition::new(100, 1000, 99, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "Partition index must be within its allocated space.")]
|
||||||
|
fn test_partition_limits_boundary1() {
|
||||||
|
let mut part = Partition::new(100, 1000, 100, true);
|
||||||
|
part.set_next_entid(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "Partition index must be within its allocated space.")]
|
||||||
|
fn test_partition_limits_boundary2() {
|
||||||
|
let mut part = Partition::new(100, 1000, 100, true);
|
||||||
|
part.set_next_entid(1001);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "Partition index must be within its allocated space.")]
|
||||||
|
fn test_partition_limits_boundary3() {
|
||||||
|
let mut part = Partition::new(100, 1000, 100, true);
|
||||||
|
part.set_next_entid(99);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "Partition index must be within its allocated space.")]
|
||||||
|
fn test_partition_limits_boundary4() {
|
||||||
|
let mut part = Partition::new(100, 1000, 100, true);
|
||||||
|
part.set_next_entid(-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic(expected = "Partition index must be within its allocated space.")]
|
||||||
|
fn test_partition_limits_boundary5() {
|
||||||
|
let mut part = Partition::new(100, 1000, 100, true);
|
||||||
|
part.allocate_entids(901); // One more than allowed.
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_partition_limits_boundary6() {
|
||||||
|
let mut part = Partition::new(100, 1000, 100, true);
|
||||||
|
part.set_next_entid(100); // First entid that's allowed.
|
||||||
|
part.set_next_entid(101); // Just after first.
|
||||||
|
|
||||||
|
assert_eq!(101..111, part.allocate_entids(10));
|
||||||
|
|
||||||
|
part.set_next_entid(1000); // Last entid that's allowed.
|
||||||
|
part.set_next_entid(999); // Just before last.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -13,49 +13,31 @@
|
||||||
//! This module implements the upsert resolution algorithm described at
|
//! This module implements the upsert resolution algorithm described at
|
||||||
//! https://github.com/mozilla/mentat/wiki/Transacting:-upsert-resolution-algorithm.
|
//! https://github.com/mozilla/mentat/wiki/Transacting:-upsert-resolution-algorithm.
|
||||||
|
|
||||||
use std::collections::{
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
BTreeMap,
|
|
||||||
BTreeSet,
|
|
||||||
};
|
|
||||||
|
|
||||||
use indexmap;
|
use indexmap;
|
||||||
use petgraph::unionfind;
|
use petgraph::unionfind;
|
||||||
|
|
||||||
use errors::{
|
use crate::internal_types::{
|
||||||
DbError,
|
Population, TempIdHandle, TempIdMap, Term, TermWithTempIds, TermWithoutTempIds, TypedValueOr,
|
||||||
Result,
|
|
||||||
};
|
|
||||||
use types::{
|
|
||||||
AVPair,
|
|
||||||
};
|
|
||||||
use internal_types::{
|
|
||||||
Population,
|
|
||||||
TempIdHandle,
|
|
||||||
TempIdMap,
|
|
||||||
Term,
|
|
||||||
TermWithoutTempIds,
|
|
||||||
TermWithTempIds,
|
|
||||||
TypedValueOr,
|
|
||||||
};
|
};
|
||||||
|
use crate::types::AVPair;
|
||||||
|
use db_traits::errors::{DbErrorKind, Result};
|
||||||
|
|
||||||
use mentat_core::util::Either::*;
|
use mentat_core::util::Either::*;
|
||||||
|
|
||||||
use mentat_core::{
|
use core_traits::{attribute, Attribute, Entid, TypedValue};
|
||||||
attribute,
|
|
||||||
Attribute,
|
use crate::schema::SchemaBuilding;
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
TypedValue,
|
|
||||||
};
|
|
||||||
use edn::entities::OpType;
|
use edn::entities::OpType;
|
||||||
use schema::SchemaBuilding;
|
use mentat_core::Schema;
|
||||||
|
|
||||||
/// A "Simple upsert" that looks like [:db/add TEMPID a v], where a is :db.unique/identity.
|
/// A "Simple upsert" that looks like [:db/add TEMPID a v], where a is :db.unique/identity.
|
||||||
#[derive(Clone,Debug,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
struct UpsertE(TempIdHandle, Entid, TypedValue);
|
struct UpsertE(TempIdHandle, Entid, TypedValue);
|
||||||
|
|
||||||
/// A "Complex upsert" that looks like [:db/add TEMPID a OTHERID], where a is :db.unique/identity
|
/// A "Complex upsert" that looks like [:db/add TEMPID a OTHERID], where a is :db.unique/identity
|
||||||
#[derive(Clone,Debug,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
struct UpsertEV(TempIdHandle, Entid, TempIdHandle);
|
struct UpsertEV(TempIdHandle, Entid, TempIdHandle);
|
||||||
|
|
||||||
/// A generation collects entities into populations at a single evolutionary step in the upsert
|
/// A generation collects entities into populations at a single evolutionary step in the upsert
|
||||||
|
@ -64,7 +46,7 @@ struct UpsertEV(TempIdHandle, Entid, TempIdHandle);
|
||||||
/// The upsert resolution process is only concerned with [:db/add ...] entities until the final
|
/// The upsert resolution process is only concerned with [:db/add ...] entities until the final
|
||||||
/// entid allocations. That's why we separate into special simple and complex upsert types
|
/// entid allocations. That's why we separate into special simple and complex upsert types
|
||||||
/// immediately, and then collect the more general term types for final resolution.
|
/// immediately, and then collect the more general term types for final resolution.
|
||||||
#[derive(Clone,Debug,Default,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
pub(crate) struct Generation {
|
pub(crate) struct Generation {
|
||||||
/// "Simple upserts" that look like [:db/add TEMPID a v], where a is :db.unique/identity.
|
/// "Simple upserts" that look like [:db/add TEMPID a v], where a is :db.unique/identity.
|
||||||
upserts_e: Vec<UpsertE>,
|
upserts_e: Vec<UpsertE>,
|
||||||
|
@ -87,7 +69,7 @@ pub(crate) struct Generation {
|
||||||
resolved: Vec<TermWithoutTempIds>,
|
resolved: Vec<TermWithoutTempIds>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone,Debug,Default,Eq,Hash,Ord,PartialOrd,PartialEq)]
|
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialOrd, PartialEq)]
|
||||||
pub(crate) struct FinalPopulations {
|
pub(crate) struct FinalPopulations {
|
||||||
/// Upserts that upserted.
|
/// Upserts that upserted.
|
||||||
pub upserted: Vec<TermWithoutTempIds>,
|
pub upserted: Vec<TermWithoutTempIds>,
|
||||||
|
@ -102,7 +84,10 @@ pub(crate) struct FinalPopulations {
|
||||||
impl Generation {
|
impl Generation {
|
||||||
/// Split entities into a generation of populations that need to evolve to have their tempids
|
/// Split entities into a generation of populations that need to evolve to have their tempids
|
||||||
/// resolved or allocated, and a population of inert entities that do not reference tempids.
|
/// resolved or allocated, and a population of inert entities that do not reference tempids.
|
||||||
pub(crate) fn from<I>(terms: I, schema: &Schema) -> Result<(Generation, Population)> where I: IntoIterator<Item=TermWithTempIds> {
|
pub(crate) fn from<I>(terms: I, schema: &Schema) -> Result<(Generation, Population)>
|
||||||
|
where
|
||||||
|
I: IntoIterator<Item = TermWithTempIds>,
|
||||||
|
{
|
||||||
let mut generation = Generation::default();
|
let mut generation = Generation::default();
|
||||||
let mut inert = vec![];
|
let mut inert = vec![];
|
||||||
|
|
||||||
|
@ -117,22 +102,28 @@ impl Generation {
|
||||||
if op == OpType::Add && is_unique(a)? {
|
if op == OpType::Add && is_unique(a)? {
|
||||||
generation.upserts_ev.push(UpsertEV(e, a, v));
|
generation.upserts_ev.push(UpsertEV(e, a, v));
|
||||||
} else {
|
} else {
|
||||||
generation.allocations.push(Term::AddOrRetract(op, Right(e), a, Right(v)));
|
generation
|
||||||
|
.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Right(e), a, Right(v)));
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Term::AddOrRetract(op, Right(e), a, Left(v)) => {
|
Term::AddOrRetract(op, Right(e), a, Left(v)) => {
|
||||||
if op == OpType::Add && is_unique(a)? {
|
if op == OpType::Add && is_unique(a)? {
|
||||||
generation.upserts_e.push(UpsertE(e, a, v));
|
generation.upserts_e.push(UpsertE(e, a, v));
|
||||||
} else {
|
} else {
|
||||||
generation.allocations.push(Term::AddOrRetract(op, Right(e), a, Left(v)));
|
generation
|
||||||
|
.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Right(e), a, Left(v)));
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Term::AddOrRetract(op, Left(e), a, Right(v)) => {
|
Term::AddOrRetract(op, Left(e), a, Right(v)) => {
|
||||||
generation.allocations.push(Term::AddOrRetract(op, Left(e), a, Right(v)));
|
generation
|
||||||
},
|
.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Left(e), a, Right(v)));
|
||||||
|
}
|
||||||
Term::AddOrRetract(op, Left(e), a, Left(v)) => {
|
Term::AddOrRetract(op, Left(e), a, Left(v)) => {
|
||||||
inert.push(Term::AddOrRetract(op, Left(e), a, Left(v)));
|
inert.push(Term::AddOrRetract(op, Left(e), a, Left(v)));
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +152,10 @@ impl Generation {
|
||||||
for UpsertE(t, a, v) in self.upserts_e {
|
for UpsertE(t, a, v) in self.upserts_e {
|
||||||
match temp_id_map.get(&*t) {
|
match temp_id_map.get(&*t) {
|
||||||
Some(&n) => next.upserted.push(Term::AddOrRetract(OpType::Add, n, a, v)),
|
Some(&n) => next.upserted.push(Term::AddOrRetract(OpType::Add, n, a, v)),
|
||||||
None => next.allocations.push(Term::AddOrRetract(OpType::Add, Right(t), a, Left(v))),
|
None => {
|
||||||
|
next.allocations
|
||||||
|
.push(Term::AddOrRetract(OpType::Add, Right(t), a, Left(v)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,10 +166,13 @@ impl Generation {
|
||||||
// could conflict. Moving straight to resolved doesn't give us a chance to
|
// could conflict. Moving straight to resolved doesn't give us a chance to
|
||||||
// search the store for the conflict.
|
// search the store for the conflict.
|
||||||
next.upserts_e.push(UpsertE(t1, a, TypedValue::Ref(n2.0)))
|
next.upserts_e.push(UpsertE(t1, a, TypedValue::Ref(n2.0)))
|
||||||
},
|
}
|
||||||
(None, Some(&n2)) => next.upserts_e.push(UpsertE(t1, a, TypedValue::Ref(n2.0))),
|
(None, Some(&n2)) => next.upserts_e.push(UpsertE(t1, a, TypedValue::Ref(n2.0))),
|
||||||
(Some(&n1), None) => next.allocations.push(Term::AddOrRetract(OpType::Add, Left(n1), a, Right(t2))),
|
(Some(&n1), None) => {
|
||||||
(None, None) => next.upserts_ev.push(UpsertEV(t1, a, t2))
|
next.allocations
|
||||||
|
.push(Term::AddOrRetract(OpType::Add, Left(n1), a, Right(t2)))
|
||||||
|
}
|
||||||
|
(None, None) => next.upserts_ev.push(UpsertEV(t1, a, t2)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,23 +184,40 @@ impl Generation {
|
||||||
match term {
|
match term {
|
||||||
Term::AddOrRetract(op, Right(t1), a, Right(t2)) => {
|
Term::AddOrRetract(op, Right(t1), a, Right(t2)) => {
|
||||||
match (temp_id_map.get(&*t1), temp_id_map.get(&*t2)) {
|
match (temp_id_map.get(&*t1), temp_id_map.get(&*t2)) {
|
||||||
(Some(&n1), Some(&n2)) => next.resolved.push(Term::AddOrRetract(op, n1, a, TypedValue::Ref(n2.0))),
|
(Some(&n1), Some(&n2)) => {
|
||||||
(None, Some(&n2)) => next.allocations.push(Term::AddOrRetract(op, Right(t1), a, Left(TypedValue::Ref(n2.0)))),
|
next.resolved
|
||||||
(Some(&n1), None) => next.allocations.push(Term::AddOrRetract(op, Left(n1), a, Right(t2))),
|
.push(Term::AddOrRetract(op, n1, a, TypedValue::Ref(n2.0)))
|
||||||
(None, None) => next.allocations.push(Term::AddOrRetract(op, Right(t1), a, Right(t2))),
|
}
|
||||||
|
(None, Some(&n2)) => next.allocations.push(Term::AddOrRetract(
|
||||||
|
op,
|
||||||
|
Right(t1),
|
||||||
|
a,
|
||||||
|
Left(TypedValue::Ref(n2.0)),
|
||||||
|
)),
|
||||||
|
(Some(&n1), None) => {
|
||||||
|
next.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Left(n1), a, Right(t2)))
|
||||||
|
}
|
||||||
|
(None, None) => {
|
||||||
|
next.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Right(t1), a, Right(t2)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
Term::AddOrRetract(op, Right(t), a, Left(v)) => match temp_id_map.get(&*t) {
|
||||||
|
Some(&n) => next.resolved.push(Term::AddOrRetract(op, n, a, v)),
|
||||||
|
None => next
|
||||||
|
.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Right(t), a, Left(v))),
|
||||||
},
|
},
|
||||||
Term::AddOrRetract(op, Right(t), a, Left(v)) => {
|
Term::AddOrRetract(op, Left(e), a, Right(t)) => match temp_id_map.get(&*t) {
|
||||||
match temp_id_map.get(&*t) {
|
Some(&n) => {
|
||||||
Some(&n) => next.resolved.push(Term::AddOrRetract(op, n, a, v)),
|
next.resolved
|
||||||
None => next.allocations.push(Term::AddOrRetract(op, Right(t), a, Left(v))),
|
.push(Term::AddOrRetract(op, e, a, TypedValue::Ref(n.0)))
|
||||||
}
|
|
||||||
},
|
|
||||||
Term::AddOrRetract(op, Left(e), a, Right(t)) => {
|
|
||||||
match temp_id_map.get(&*t) {
|
|
||||||
Some(&n) => next.resolved.push(Term::AddOrRetract(op, e, a, TypedValue::Ref(n.0))),
|
|
||||||
None => next.allocations.push(Term::AddOrRetract(op, Left(e), a, Right(t))),
|
|
||||||
}
|
}
|
||||||
|
None => next
|
||||||
|
.allocations
|
||||||
|
.push(Term::AddOrRetract(op, Left(e), a, Right(t))),
|
||||||
},
|
},
|
||||||
Term::AddOrRetract(_, Left(_), _, Left(_)) => unreachable!(),
|
Term::AddOrRetract(_, Left(_), _, Left(_)) => unreachable!(),
|
||||||
}
|
}
|
||||||
|
@ -213,7 +227,7 @@ impl Generation {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect id->[a v] pairs that might upsert at this evolutionary step.
|
// Collect id->[a v] pairs that might upsert at this evolutionary step.
|
||||||
pub(crate) fn temp_id_avs<'a>(&'a self) -> Vec<(TempIdHandle, AVPair)> {
|
pub(crate) fn temp_id_avs(&self) -> Vec<(TempIdHandle, AVPair)> {
|
||||||
let mut temp_id_avs: Vec<(TempIdHandle, AVPair)> = vec![];
|
let mut temp_id_avs: Vec<(TempIdHandle, AVPair)> = vec![];
|
||||||
// TODO: map/collect.
|
// TODO: map/collect.
|
||||||
for &UpsertE(ref t, ref a, ref v) in &self.upserts_e {
|
for &UpsertE(ref t, ref a, ref v) in &self.upserts_e {
|
||||||
|
@ -229,7 +243,11 @@ impl Generation {
|
||||||
let mut upserts_ev = vec![];
|
let mut upserts_ev = vec![];
|
||||||
::std::mem::swap(&mut self.upserts_ev, &mut upserts_ev);
|
::std::mem::swap(&mut self.upserts_ev, &mut upserts_ev);
|
||||||
|
|
||||||
self.allocations.extend(upserts_ev.into_iter().map(|UpsertEV(t1, a, t2)| Term::AddOrRetract(OpType::Add, Right(t1), a, Right(t2))));
|
self.allocations.extend(
|
||||||
|
upserts_ev.into_iter().map(|UpsertEV(t1, a, t2)| {
|
||||||
|
Term::AddOrRetract(OpType::Add, Right(t1), a, Right(t2))
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -238,38 +256,48 @@ impl Generation {
|
||||||
///
|
///
|
||||||
/// Some of the tempids may be identified, so we also provide a map from tempid to a dense set
|
/// Some of the tempids may be identified, so we also provide a map from tempid to a dense set
|
||||||
/// of contiguous integer labels.
|
/// of contiguous integer labels.
|
||||||
pub(crate) fn temp_ids_in_allocations(&self, schema: &Schema) -> Result<BTreeMap<TempIdHandle, usize>> {
|
pub(crate) fn temp_ids_in_allocations(
|
||||||
|
&self,
|
||||||
|
schema: &Schema,
|
||||||
|
) -> Result<BTreeMap<TempIdHandle, usize>> {
|
||||||
assert!(self.upserts_e.is_empty(), "All upserts should have been upserted, resolved, or moved to the allocated population!");
|
assert!(self.upserts_e.is_empty(), "All upserts should have been upserted, resolved, or moved to the allocated population!");
|
||||||
assert!(self.upserts_ev.is_empty(), "All upserts should have been upserted, resolved, or moved to the allocated population!");
|
assert!(self.upserts_ev.is_empty(), "All upserts should have been upserted, resolved, or moved to the allocated population!");
|
||||||
|
|
||||||
let mut temp_ids: BTreeSet<TempIdHandle> = BTreeSet::default();
|
let mut temp_ids: BTreeSet<TempIdHandle> = BTreeSet::default();
|
||||||
let mut tempid_avs: BTreeMap<(Entid, TypedValueOr<TempIdHandle>), Vec<TempIdHandle>> = BTreeMap::default();
|
let mut tempid_avs: BTreeMap<(Entid, TypedValueOr<TempIdHandle>), Vec<TempIdHandle>> =
|
||||||
|
BTreeMap::default();
|
||||||
|
|
||||||
for term in self.allocations.iter() {
|
for term in self.allocations.iter() {
|
||||||
match term {
|
match term {
|
||||||
&Term::AddOrRetract(OpType::Add, Right(ref t1), a, Right(ref t2)) => {
|
Term::AddOrRetract(OpType::Add, Right(ref t1), a, Right(ref t2)) => {
|
||||||
temp_ids.insert(t1.clone());
|
temp_ids.insert(t1.clone());
|
||||||
temp_ids.insert(t2.clone());
|
temp_ids.insert(t2.clone());
|
||||||
let attribute: &Attribute = schema.require_attribute_for_entid(a)?;
|
let attribute: &Attribute = schema.require_attribute_for_entid(*a)?;
|
||||||
if attribute.unique == Some(attribute::Unique::Identity) {
|
if attribute.unique == Some(attribute::Unique::Identity) {
|
||||||
tempid_avs.entry((a, Right(t2.clone()))).or_insert(vec![]).push(t1.clone());
|
tempid_avs
|
||||||
|
.entry((*a, Right(t2.clone())))
|
||||||
|
.or_insert_with(Vec::new)
|
||||||
|
.push(t1.clone());
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
&Term::AddOrRetract(OpType::Add, Right(ref t), a, ref x @ Left(_)) => {
|
Term::AddOrRetract(OpType::Add, Right(ref t), a, ref x @ Left(_)) => {
|
||||||
temp_ids.insert(t.clone());
|
temp_ids.insert(t.clone());
|
||||||
let attribute: &Attribute = schema.require_attribute_for_entid(a)?;
|
let attribute: &Attribute = schema.require_attribute_for_entid(*a)?;
|
||||||
if attribute.unique == Some(attribute::Unique::Identity) {
|
if attribute.unique == Some(attribute::Unique::Identity) {
|
||||||
tempid_avs.entry((a, x.clone())).or_insert(vec![]).push(t.clone());
|
tempid_avs
|
||||||
|
.entry((*a, x.clone()))
|
||||||
|
.or_insert_with(Vec::new)
|
||||||
|
.push(t.clone());
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
&Term::AddOrRetract(OpType::Add, Left(_), _, Right(ref t)) => {
|
Term::AddOrRetract(OpType::Add, Left(_), _, Right(ref t)) => {
|
||||||
temp_ids.insert(t.clone());
|
temp_ids.insert(t.clone());
|
||||||
},
|
}
|
||||||
&Term::AddOrRetract(OpType::Add, Left(_), _, Left(_)) => unreachable!(),
|
Term::AddOrRetract(OpType::Add, Left(_), _, Left(_)) => unreachable!(),
|
||||||
&Term::AddOrRetract(OpType::Retract, _, _, _) => {
|
Term::AddOrRetract(OpType::Retract, _, _, _) => {
|
||||||
// [:db/retract ...] entities never allocate entids; they have to resolve due to
|
// [:db/retract ...] entities never allocate entids; they have to resolve due to
|
||||||
// other upserts (or they fail the transaction).
|
// other upserts (or they fail the transaction).
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,16 +307,23 @@ impl Generation {
|
||||||
|
|
||||||
// The union-find implementation from petgraph operates on contiguous indices, so we need to
|
// The union-find implementation from petgraph operates on contiguous indices, so we need to
|
||||||
// maintain the map from our tempids to indices ourselves.
|
// maintain the map from our tempids to indices ourselves.
|
||||||
let temp_ids: BTreeMap<TempIdHandle, usize> = temp_ids.into_iter().enumerate().map(|(i, tempid)| (tempid, i)).collect();
|
let temp_ids: BTreeMap<TempIdHandle, usize> = temp_ids
|
||||||
|
.into_iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(i, tempid)| (tempid, i))
|
||||||
|
.collect();
|
||||||
|
|
||||||
debug!("need to label tempids aggregated using tempid_avs {:?}", tempid_avs);
|
debug!(
|
||||||
|
"need to label tempids aggregated using tempid_avs {:?}",
|
||||||
|
tempid_avs
|
||||||
|
);
|
||||||
|
|
||||||
for vs in tempid_avs.values() {
|
for vs in tempid_avs.values() {
|
||||||
vs.first().and_then(|first| temp_ids.get(first)).map(|&first_index| {
|
if let Some(&first_index) = vs.first().and_then(|first| temp_ids.get(first)) {
|
||||||
for tempid in vs {
|
for tempid in vs {
|
||||||
temp_ids.get(tempid).map(|&i| uf.union(first_index, i));
|
temp_ids.get(tempid).map(|&i| uf.union(first_index, i));
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("union-find aggregation {:?}", uf.clone().into_labeling());
|
debug!("union-find aggregation {:?}", uf.clone().into_labeling());
|
||||||
|
@ -305,17 +340,26 @@ impl Generation {
|
||||||
for (tempid, tempid_index) in temp_ids {
|
for (tempid, tempid_index) in temp_ids {
|
||||||
let rep = uf.find_mut(tempid_index);
|
let rep = uf.find_mut(tempid_index);
|
||||||
dense_labels.insert(rep);
|
dense_labels.insert(rep);
|
||||||
dense_labels.get_full(&rep).map(|(dense_index, _)| tempid_map.insert(tempid.clone(), dense_index));
|
dense_labels
|
||||||
|
.get_full(&rep)
|
||||||
|
.map(|(dense_index, _)| tempid_map.insert(tempid.clone(), dense_index));
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("labeled tempids using {} labels: {:?}", dense_labels.len(), tempid_map);
|
debug!(
|
||||||
|
"labeled tempids using {} labels: {:?}",
|
||||||
|
dense_labels.len(),
|
||||||
|
tempid_map
|
||||||
|
);
|
||||||
|
|
||||||
Ok(tempid_map)
|
Ok(tempid_map)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// After evolution is complete, use the provided allocated entids to segment `self` into
|
/// After evolution is complete, use the provided allocated entids to segment `self` into
|
||||||
/// populations, each with no references to tempids.
|
/// populations, each with no references to tempids.
|
||||||
pub(crate) fn into_final_populations(self, temp_id_map: &TempIdMap) -> Result<FinalPopulations> {
|
pub(crate) fn into_final_populations(
|
||||||
|
self,
|
||||||
|
temp_id_map: &TempIdMap,
|
||||||
|
) -> Result<FinalPopulations> {
|
||||||
assert!(self.upserts_e.is_empty());
|
assert!(self.upserts_e.is_empty());
|
||||||
assert!(self.upserts_ev.is_empty());
|
assert!(self.upserts_ev.is_empty());
|
||||||
|
|
||||||
|
@ -331,23 +375,29 @@ impl Generation {
|
||||||
match (op, temp_id_map.get(&*t1), temp_id_map.get(&*t2)) {
|
match (op, temp_id_map.get(&*t1), temp_id_map.get(&*t2)) {
|
||||||
(op, Some(&n1), Some(&n2)) => Term::AddOrRetract(op, n1, a, TypedValue::Ref(n2.0)),
|
(op, Some(&n1), Some(&n2)) => Term::AddOrRetract(op, n1, a, TypedValue::Ref(n2.0)),
|
||||||
(OpType::Add, _, _) => unreachable!(), // This is a coding error -- every tempid in a :db/add entity should resolve or be allocated.
|
(OpType::Add, _, _) => unreachable!(), // This is a coding error -- every tempid in a :db/add entity should resolve or be allocated.
|
||||||
(OpType::Retract, _, _) => bail!(DbError::NotYetImplemented(format!("[:db/retract ...] entity referenced tempid that did not upsert: one of {}, {}", t1, t2))),
|
(OpType::Retract, _, _) => bail!(DbErrorKind::NotYetImplemented(format!("[:db/retract ...] entity referenced tempid that did not upsert: one of {}, {}", t1, t2))),
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Term::AddOrRetract(op, Right(t), a, Left(v)) => {
|
Term::AddOrRetract(op, Right(t), a, Left(v)) => {
|
||||||
match (op, temp_id_map.get(&*t)) {
|
match (op, temp_id_map.get(&*t)) {
|
||||||
(op, Some(&n)) => Term::AddOrRetract(op, n, a, v),
|
(op, Some(&n)) => Term::AddOrRetract(op, n, a, v),
|
||||||
(OpType::Add, _) => unreachable!(), // This is a coding error.
|
(OpType::Add, _) => unreachable!(), // This is a coding error.
|
||||||
(OpType::Retract, _) => bail!(DbError::NotYetImplemented(format!("[:db/retract ...] entity referenced tempid that did not upsert: {}", t))),
|
(OpType::Retract, _) => bail!(DbErrorKind::NotYetImplemented(format!(
|
||||||
|
"[:db/retract ...] entity referenced tempid that did not upsert: {}",
|
||||||
|
t
|
||||||
|
))),
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Term::AddOrRetract(op, Left(e), a, Right(t)) => {
|
Term::AddOrRetract(op, Left(e), a, Right(t)) => {
|
||||||
match (op, temp_id_map.get(&*t)) {
|
match (op, temp_id_map.get(&*t)) {
|
||||||
(op, Some(&n)) => Term::AddOrRetract(op, e, a, TypedValue::Ref(n.0)),
|
(op, Some(&n)) => Term::AddOrRetract(op, e, a, TypedValue::Ref(n.0)),
|
||||||
(OpType::Add, _) => unreachable!(), // This is a coding error.
|
(OpType::Add, _) => unreachable!(), // This is a coding error.
|
||||||
(OpType::Retract, _) => bail!(DbError::NotYetImplemented(format!("[:db/retract ...] entity referenced tempid that did not upsert: {}", t))),
|
(OpType::Retract, _) => bail!(DbErrorKind::NotYetImplemented(format!(
|
||||||
|
"[:db/retract ...] entity referenced tempid that did not upsert: {}",
|
||||||
|
t
|
||||||
|
))),
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
Term::AddOrRetract(_, Left(_), _, Left(_)) => unreachable!(), // This is a coding error -- these should not be in allocations.
|
Term::AddOrRetract(_, Left(_), _, Left(_)) => unreachable!(), // This is a coding error -- these should not be in allocations.
|
||||||
};
|
};
|
||||||
populations.allocated.push(allocated);
|
populations.allocated.push(allocated);
|
||||||
|
|
|
@ -17,19 +17,13 @@
|
||||||
// - When observers are registered we want to flip some flags as writes occur so that we can
|
// - When observers are registered we want to flip some flags as writes occur so that we can
|
||||||
// notifying them outside the transaction.
|
// notifying them outside the transaction.
|
||||||
|
|
||||||
use mentat_core::{
|
use core_traits::{Entid, TypedValue};
|
||||||
Entid,
|
|
||||||
Schema,
|
|
||||||
TypedValue,
|
|
||||||
};
|
|
||||||
|
|
||||||
use edn::entities::{
|
use mentat_core::Schema;
|
||||||
OpType,
|
|
||||||
};
|
|
||||||
|
|
||||||
use errors::{
|
use edn::entities::OpType;
|
||||||
Result,
|
|
||||||
};
|
use db_traits::errors::Result;
|
||||||
|
|
||||||
pub trait TransactWatcher {
|
pub trait TransactWatcher {
|
||||||
fn datom(&mut self, op: OpType, e: Entid, a: Entid, v: &TypedValue);
|
fn datom(&mut self, op: OpType, e: Entid, a: Entid, v: &TypedValue);
|
||||||
|
@ -44,8 +38,7 @@ pub trait TransactWatcher {
|
||||||
pub struct NullWatcher();
|
pub struct NullWatcher();
|
||||||
|
|
||||||
impl TransactWatcher for NullWatcher {
|
impl TransactWatcher for NullWatcher {
|
||||||
fn datom(&mut self, _op: OpType, _e: Entid, _a: Entid, _v: &TypedValue) {
|
fn datom(&mut self, _op: OpType, _e: Entid, _a: Entid, _v: &TypedValue) {}
|
||||||
}
|
|
||||||
|
|
||||||
fn done(&mut self, _t: &Entid, _schema: &Schema) -> Result<()> {
|
fn done(&mut self, _t: &Entid, _schema: &Schema) -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||||||
// specific language governing permissions and limitations under the License.
|
// specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
|
extern crate core_traits;
|
||||||
extern crate edn;
|
extern crate edn;
|
||||||
extern crate mentat_core;
|
|
||||||
extern crate mentat_db;
|
extern crate mentat_db;
|
||||||
extern crate ordered_float;
|
extern crate ordered_float;
|
||||||
extern crate rusqlite;
|
extern crate rusqlite;
|
||||||
|
@ -18,41 +18,105 @@ use ordered_float::OrderedFloat;
|
||||||
|
|
||||||
use edn::symbols;
|
use edn::symbols;
|
||||||
|
|
||||||
use mentat_core::{TypedValue, ValueType};
|
use core_traits::{TypedValue, ValueType};
|
||||||
use mentat_db::db::TypedSQLValue;
|
use mentat_db::db::TypedSQLValue;
|
||||||
|
|
||||||
// It's not possible to test to_sql_value_pair since rusqlite::ToSqlOutput doesn't implement
|
// It's not possible to test to_sql_value_pair since rusqlite::ToSqlOutput doesn't implement
|
||||||
// PartialEq.
|
// PartialEq.
|
||||||
#[test]
|
#[test]
|
||||||
fn test_from_sql_value_pair() {
|
fn test_from_sql_value_pair() {
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(1234), 0).unwrap(), TypedValue::Ref(1234));
|
assert_eq!(
|
||||||
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(1234), 0).unwrap(),
|
||||||
|
TypedValue::Ref(1234)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(0), 1).unwrap(), TypedValue::Boolean(false));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(1), 1).unwrap(), TypedValue::Boolean(true));
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(0), 1).unwrap(),
|
||||||
|
TypedValue::Boolean(false)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(1), 1).unwrap(),
|
||||||
|
TypedValue::Boolean(true)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(0), 5).unwrap(), TypedValue::Long(0));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(1234), 5).unwrap(), TypedValue::Long(1234));
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(0), 5).unwrap(),
|
||||||
|
TypedValue::Long(0)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Integer(1234), 5).unwrap(),
|
||||||
|
TypedValue::Long(1234)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Real(0.0), 5).unwrap(), TypedValue::Double(OrderedFloat(0.0)));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Real(0.5), 5).unwrap(), TypedValue::Double(OrderedFloat(0.5)));
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Real(0.0), 5).unwrap(),
|
||||||
|
TypedValue::Double(OrderedFloat(0.0))
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Real(0.5), 5).unwrap(),
|
||||||
|
TypedValue::Double(OrderedFloat(0.5))
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Text(":db/keyword".into()), 10).unwrap(), TypedValue::typed_string(":db/keyword"));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::from_sql_value_pair(rusqlite::types::Value::Text(":db/keyword".into()), 13).unwrap(), TypedValue::typed_ns_keyword("db", "keyword"));
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Text(":db/keyword".into()), 10)
|
||||||
|
.unwrap(),
|
||||||
|
TypedValue::typed_string(":db/keyword")
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Text(":db/keyword".into()), 13)
|
||||||
|
.unwrap(),
|
||||||
|
TypedValue::typed_ns_keyword("db", "keyword")
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::from_sql_value_pair(rusqlite::types::Value::Blob(vec![1, 2, 3, 42]), 15)
|
||||||
|
.unwrap(),
|
||||||
|
TypedValue::Bytes((vec![1, 2, 3, 42]).into())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_to_edn_value_pair() {
|
fn test_to_edn_value_pair() {
|
||||||
assert_eq!(TypedValue::Ref(1234).to_edn_value_pair(), (edn::Value::Integer(1234), ValueType::Ref));
|
assert_eq!(
|
||||||
|
TypedValue::Ref(1234).to_edn_value_pair(),
|
||||||
|
(edn::Value::Integer(1234), ValueType::Ref)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::Boolean(false).to_edn_value_pair(), (edn::Value::Boolean(false), ValueType::Boolean));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::Boolean(true).to_edn_value_pair(), (edn::Value::Boolean(true), ValueType::Boolean));
|
TypedValue::Boolean(false).to_edn_value_pair(),
|
||||||
|
(edn::Value::Boolean(false), ValueType::Boolean)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::Boolean(true).to_edn_value_pair(),
|
||||||
|
(edn::Value::Boolean(true), ValueType::Boolean)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::Long(0).to_edn_value_pair(), (edn::Value::Integer(0), ValueType::Long));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::Long(1234).to_edn_value_pair(), (edn::Value::Integer(1234), ValueType::Long));
|
TypedValue::Long(0).to_edn_value_pair(),
|
||||||
|
(edn::Value::Integer(0), ValueType::Long)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::Long(1234).to_edn_value_pair(),
|
||||||
|
(edn::Value::Integer(1234), ValueType::Long)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::Double(OrderedFloat(0.0)).to_edn_value_pair(), (edn::Value::Float(OrderedFloat(0.0)), ValueType::Double));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::Double(OrderedFloat(0.5)).to_edn_value_pair(), (edn::Value::Float(OrderedFloat(0.5)), ValueType::Double));
|
TypedValue::Double(OrderedFloat(0.0)).to_edn_value_pair(),
|
||||||
|
(edn::Value::Float(OrderedFloat(0.0)), ValueType::Double)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::Double(OrderedFloat(0.5)).to_edn_value_pair(),
|
||||||
|
(edn::Value::Float(OrderedFloat(0.5)), ValueType::Double)
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(TypedValue::typed_string(":db/keyword").to_edn_value_pair(), (edn::Value::Text(":db/keyword".into()), ValueType::String));
|
assert_eq!(
|
||||||
assert_eq!(TypedValue::typed_ns_keyword("db", "keyword").to_edn_value_pair(), (edn::Value::Keyword(symbols::Keyword::namespaced("db", "keyword")), ValueType::Keyword));
|
TypedValue::typed_string(":db/keyword").to_edn_value_pair(),
|
||||||
|
(edn::Value::Text(":db/keyword".into()), ValueType::String)
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
TypedValue::typed_ns_keyword("db", "keyword").to_edn_value_pair(),
|
||||||
|
(
|
||||||
|
edn::Value::Keyword(symbols::Keyword::namespaced("db", "keyword")),
|
||||||
|
ValueType::Keyword
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ source "https://rubygems.org"
|
||||||
# gem "jekyll", "~> 3.7.3"
|
# gem "jekyll", "~> 3.7.3"
|
||||||
|
|
||||||
# This is the default theme for new Jekyll sites. You may change this to anything you like.
|
# This is the default theme for new Jekyll sites. You may change this to anything you like.
|
||||||
gem "minima", "~> 2.0"
|
gem "minima", "~> 2.5.1"
|
||||||
|
|
||||||
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
||||||
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
||||||
|
@ -19,9 +19,9 @@ gem "minima", "~> 2.0"
|
||||||
|
|
||||||
# If you have any plugins, put them here!
|
# If you have any plugins, put them here!
|
||||||
group :jekyll_plugins do
|
group :jekyll_plugins do
|
||||||
gem "jekyll-feed", "~> 0.9.3"
|
gem "jekyll-feed", "~> 0.15.1"
|
||||||
gem "github-pages", "~> 186"
|
gem "github-pages", "~> 215"
|
||||||
gem "jekyll-commonmark-ghpages", "~> 0.1.5"
|
gem "jekyll-commonmark-ghpages", "~> 0.1.6"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||||
|
|
|
@ -1,148 +1,161 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
activesupport (4.2.10)
|
activesupport (6.0.4)
|
||||||
i18n (~> 0.7)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
|
i18n (>= 0.7, < 2)
|
||||||
minitest (~> 5.1)
|
minitest (~> 5.1)
|
||||||
thread_safe (~> 0.3, >= 0.3.4)
|
|
||||||
tzinfo (~> 1.1)
|
tzinfo (~> 1.1)
|
||||||
addressable (2.5.2)
|
zeitwerk (~> 2.2, >= 2.2.2)
|
||||||
public_suffix (>= 2.0.2, < 4.0)
|
addressable (2.8.0)
|
||||||
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
coffee-script (2.4.1)
|
coffee-script (2.4.1)
|
||||||
coffee-script-source
|
coffee-script-source
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.11.1)
|
coffee-script-source (1.11.1)
|
||||||
colorator (1.1.0)
|
colorator (1.1.0)
|
||||||
commonmarker (0.17.9)
|
commonmarker (0.17.13)
|
||||||
ruby-enum (~> 0.5)
|
ruby-enum (~> 0.5)
|
||||||
concurrent-ruby (1.0.5)
|
concurrent-ruby (1.1.9)
|
||||||
dnsruby (1.60.2)
|
dnsruby (1.61.7)
|
||||||
em-websocket (0.5.1)
|
simpleidn (~> 0.1)
|
||||||
|
em-websocket (0.5.2)
|
||||||
eventmachine (>= 0.12.9)
|
eventmachine (>= 0.12.9)
|
||||||
http_parser.rb (~> 0.6.0)
|
http_parser.rb (~> 0.6.0)
|
||||||
ethon (0.11.0)
|
ethon (0.14.0)
|
||||||
ffi (>= 1.3.0)
|
ffi (>= 1.15.0)
|
||||||
eventmachine (1.2.7)
|
eventmachine (1.2.7)
|
||||||
execjs (2.7.0)
|
execjs (2.8.1)
|
||||||
faraday (0.15.2)
|
faraday (1.4.3)
|
||||||
|
faraday-em_http (~> 1.0)
|
||||||
|
faraday-em_synchrony (~> 1.0)
|
||||||
|
faraday-excon (~> 1.1)
|
||||||
|
faraday-net_http (~> 1.0)
|
||||||
|
faraday-net_http_persistent (~> 1.1)
|
||||||
multipart-post (>= 1.2, < 3)
|
multipart-post (>= 1.2, < 3)
|
||||||
ffi (1.9.25)
|
ruby2_keywords (>= 0.0.4)
|
||||||
|
faraday-em_http (1.0.0)
|
||||||
|
faraday-em_synchrony (1.0.0)
|
||||||
|
faraday-excon (1.1.0)
|
||||||
|
faraday-net_http (1.0.1)
|
||||||
|
faraday-net_http_persistent (1.1.0)
|
||||||
|
ffi (1.15.3)
|
||||||
forwardable-extended (2.6.0)
|
forwardable-extended (2.6.0)
|
||||||
gemoji (3.0.0)
|
gemoji (3.0.1)
|
||||||
github-pages (186)
|
github-pages (215)
|
||||||
activesupport (= 4.2.10)
|
github-pages-health-check (= 1.17.2)
|
||||||
github-pages-health-check (= 1.8.1)
|
jekyll (= 3.9.0)
|
||||||
jekyll (= 3.7.3)
|
jekyll-avatar (= 0.7.0)
|
||||||
jekyll-avatar (= 0.5.0)
|
|
||||||
jekyll-coffeescript (= 1.1.1)
|
jekyll-coffeescript (= 1.1.1)
|
||||||
jekyll-commonmark-ghpages (= 0.1.5)
|
jekyll-commonmark-ghpages (= 0.1.6)
|
||||||
jekyll-default-layout (= 0.1.4)
|
jekyll-default-layout (= 0.1.4)
|
||||||
jekyll-feed (= 0.9.3)
|
jekyll-feed (= 0.15.1)
|
||||||
jekyll-gist (= 1.5.0)
|
jekyll-gist (= 1.5.0)
|
||||||
jekyll-github-metadata (= 2.9.4)
|
jekyll-github-metadata (= 2.13.0)
|
||||||
jekyll-mentions (= 1.3.0)
|
jekyll-mentions (= 1.6.0)
|
||||||
jekyll-optional-front-matter (= 0.3.0)
|
jekyll-optional-front-matter (= 0.3.2)
|
||||||
jekyll-paginate (= 1.1.0)
|
jekyll-paginate (= 1.1.0)
|
||||||
jekyll-readme-index (= 0.2.0)
|
jekyll-readme-index (= 0.3.0)
|
||||||
jekyll-redirect-from (= 0.13.0)
|
jekyll-redirect-from (= 0.16.0)
|
||||||
jekyll-relative-links (= 0.5.3)
|
jekyll-relative-links (= 0.6.1)
|
||||||
jekyll-remote-theme (= 0.3.1)
|
jekyll-remote-theme (= 0.4.3)
|
||||||
jekyll-sass-converter (= 1.5.2)
|
jekyll-sass-converter (= 1.5.2)
|
||||||
jekyll-seo-tag (= 2.4.0)
|
jekyll-seo-tag (= 2.7.1)
|
||||||
jekyll-sitemap (= 1.2.0)
|
jekyll-sitemap (= 1.4.0)
|
||||||
jekyll-swiss (= 0.4.0)
|
jekyll-swiss (= 1.0.0)
|
||||||
jekyll-theme-architect (= 0.1.1)
|
jekyll-theme-architect (= 0.1.1)
|
||||||
jekyll-theme-cayman (= 0.1.1)
|
jekyll-theme-cayman (= 0.1.1)
|
||||||
jekyll-theme-dinky (= 0.1.1)
|
jekyll-theme-dinky (= 0.1.1)
|
||||||
jekyll-theme-hacker (= 0.1.1)
|
jekyll-theme-hacker (= 0.1.2)
|
||||||
jekyll-theme-leap-day (= 0.1.1)
|
jekyll-theme-leap-day (= 0.1.1)
|
||||||
jekyll-theme-merlot (= 0.1.1)
|
jekyll-theme-merlot (= 0.1.1)
|
||||||
jekyll-theme-midnight (= 0.1.1)
|
jekyll-theme-midnight (= 0.1.1)
|
||||||
jekyll-theme-minimal (= 0.1.1)
|
jekyll-theme-minimal (= 0.1.1)
|
||||||
jekyll-theme-modernist (= 0.1.1)
|
jekyll-theme-modernist (= 0.1.1)
|
||||||
jekyll-theme-primer (= 0.5.3)
|
jekyll-theme-primer (= 0.5.4)
|
||||||
jekyll-theme-slate (= 0.1.1)
|
jekyll-theme-slate (= 0.1.1)
|
||||||
jekyll-theme-tactile (= 0.1.1)
|
jekyll-theme-tactile (= 0.1.1)
|
||||||
jekyll-theme-time-machine (= 0.1.1)
|
jekyll-theme-time-machine (= 0.1.1)
|
||||||
jekyll-titles-from-headings (= 0.5.1)
|
jekyll-titles-from-headings (= 0.5.3)
|
||||||
jemoji (= 0.9.0)
|
jemoji (= 0.12.0)
|
||||||
kramdown (= 1.16.2)
|
kramdown (= 2.3.1)
|
||||||
liquid (= 4.0.0)
|
kramdown-parser-gfm (= 1.1.0)
|
||||||
listen (= 3.1.5)
|
liquid (= 4.0.3)
|
||||||
mercenary (~> 0.3)
|
mercenary (~> 0.3)
|
||||||
minima (= 2.4.1)
|
minima (= 2.5.1)
|
||||||
nokogiri (>= 1.8.2, < 2.0)
|
nokogiri (>= 1.10.4, < 2.0)
|
||||||
rouge (= 2.2.1)
|
rouge (= 3.26.0)
|
||||||
terminal-table (~> 1.4)
|
terminal-table (~> 1.4)
|
||||||
github-pages-health-check (1.8.1)
|
github-pages-health-check (1.17.2)
|
||||||
addressable (~> 2.3)
|
addressable (~> 2.3)
|
||||||
dnsruby (~> 1.60)
|
dnsruby (~> 1.60)
|
||||||
octokit (~> 4.0)
|
octokit (~> 4.0)
|
||||||
public_suffix (~> 2.0)
|
public_suffix (>= 2.0.2, < 5.0)
|
||||||
typhoeus (~> 1.3)
|
typhoeus (~> 1.3)
|
||||||
html-pipeline (2.8.0)
|
html-pipeline (2.14.0)
|
||||||
activesupport (>= 2)
|
activesupport (>= 2)
|
||||||
nokogiri (>= 1.4)
|
nokogiri (>= 1.4)
|
||||||
http_parser.rb (0.6.0)
|
http_parser.rb (0.6.0)
|
||||||
i18n (0.9.5)
|
i18n (0.9.5)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
jekyll (3.7.3)
|
jekyll (3.9.0)
|
||||||
addressable (~> 2.4)
|
addressable (~> 2.4)
|
||||||
colorator (~> 1.0)
|
colorator (~> 1.0)
|
||||||
em-websocket (~> 0.5)
|
em-websocket (~> 0.5)
|
||||||
i18n (~> 0.7)
|
i18n (~> 0.7)
|
||||||
jekyll-sass-converter (~> 1.0)
|
jekyll-sass-converter (~> 1.0)
|
||||||
jekyll-watch (~> 2.0)
|
jekyll-watch (~> 2.0)
|
||||||
kramdown (~> 1.14)
|
kramdown (>= 1.17, < 3)
|
||||||
liquid (~> 4.0)
|
liquid (~> 4.0)
|
||||||
mercenary (~> 0.3.3)
|
mercenary (~> 0.3.3)
|
||||||
pathutil (~> 0.9)
|
pathutil (~> 0.9)
|
||||||
rouge (>= 1.7, < 4)
|
rouge (>= 1.7, < 4)
|
||||||
safe_yaml (~> 1.0)
|
safe_yaml (~> 1.0)
|
||||||
jekyll-avatar (0.5.0)
|
jekyll-avatar (0.7.0)
|
||||||
jekyll (~> 3.0)
|
jekyll (>= 3.0, < 5.0)
|
||||||
jekyll-coffeescript (1.1.1)
|
jekyll-coffeescript (1.1.1)
|
||||||
coffee-script (~> 2.2)
|
coffee-script (~> 2.2)
|
||||||
coffee-script-source (~> 1.11.1)
|
coffee-script-source (~> 1.11.1)
|
||||||
jekyll-commonmark (1.2.0)
|
jekyll-commonmark (1.3.1)
|
||||||
commonmarker (~> 0.14)
|
commonmarker (~> 0.14)
|
||||||
jekyll (>= 3.0, < 4.0)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-commonmark-ghpages (0.1.5)
|
jekyll-commonmark-ghpages (0.1.6)
|
||||||
commonmarker (~> 0.17.6)
|
commonmarker (~> 0.17.6)
|
||||||
jekyll-commonmark (~> 1)
|
jekyll-commonmark (~> 1.2)
|
||||||
rouge (~> 2)
|
rouge (>= 2.0, < 4.0)
|
||||||
jekyll-default-layout (0.1.4)
|
jekyll-default-layout (0.1.4)
|
||||||
jekyll (~> 3.0)
|
jekyll (~> 3.0)
|
||||||
jekyll-feed (0.9.3)
|
jekyll-feed (0.15.1)
|
||||||
jekyll (~> 3.3)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-gist (1.5.0)
|
jekyll-gist (1.5.0)
|
||||||
octokit (~> 4.2)
|
octokit (~> 4.2)
|
||||||
jekyll-github-metadata (2.9.4)
|
jekyll-github-metadata (2.13.0)
|
||||||
jekyll (~> 3.1)
|
jekyll (>= 3.4, < 5.0)
|
||||||
octokit (~> 4.0, != 4.4.0)
|
octokit (~> 4.0, != 4.4.0)
|
||||||
jekyll-mentions (1.3.0)
|
jekyll-mentions (1.6.0)
|
||||||
activesupport (~> 4.0)
|
|
||||||
html-pipeline (~> 2.3)
|
html-pipeline (~> 2.3)
|
||||||
jekyll (~> 3.0)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-optional-front-matter (0.3.0)
|
jekyll-optional-front-matter (0.3.2)
|
||||||
jekyll (~> 3.0)
|
jekyll (>= 3.0, < 5.0)
|
||||||
jekyll-paginate (1.1.0)
|
jekyll-paginate (1.1.0)
|
||||||
jekyll-readme-index (0.2.0)
|
jekyll-readme-index (0.3.0)
|
||||||
jekyll (~> 3.0)
|
jekyll (>= 3.0, < 5.0)
|
||||||
jekyll-redirect-from (0.13.0)
|
jekyll-redirect-from (0.16.0)
|
||||||
jekyll (~> 3.3)
|
jekyll (>= 3.3, < 5.0)
|
||||||
jekyll-relative-links (0.5.3)
|
jekyll-relative-links (0.6.1)
|
||||||
jekyll (~> 3.3)
|
jekyll (>= 3.3, < 5.0)
|
||||||
jekyll-remote-theme (0.3.1)
|
jekyll-remote-theme (0.4.3)
|
||||||
jekyll (~> 3.5)
|
addressable (~> 2.0)
|
||||||
rubyzip (>= 1.2.1, < 3.0)
|
jekyll (>= 3.5, < 5.0)
|
||||||
|
jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
|
||||||
|
rubyzip (>= 1.3.0, < 3.0)
|
||||||
jekyll-sass-converter (1.5.2)
|
jekyll-sass-converter (1.5.2)
|
||||||
sass (~> 3.4)
|
sass (~> 3.4)
|
||||||
jekyll-seo-tag (2.4.0)
|
jekyll-seo-tag (2.7.1)
|
||||||
jekyll (~> 3.3)
|
jekyll (>= 3.8, < 5.0)
|
||||||
jekyll-sitemap (1.2.0)
|
jekyll-sitemap (1.4.0)
|
||||||
jekyll (~> 3.3)
|
jekyll (>= 3.7, < 5.0)
|
||||||
jekyll-swiss (0.4.0)
|
jekyll-swiss (1.0.0)
|
||||||
jekyll-theme-architect (0.1.1)
|
jekyll-theme-architect (0.1.1)
|
||||||
jekyll (~> 3.5)
|
jekyll (~> 3.5)
|
||||||
jekyll-seo-tag (~> 2.0)
|
jekyll-seo-tag (~> 2.0)
|
||||||
|
@ -152,8 +165,8 @@ GEM
|
||||||
jekyll-theme-dinky (0.1.1)
|
jekyll-theme-dinky (0.1.1)
|
||||||
jekyll (~> 3.5)
|
jekyll (~> 3.5)
|
||||||
jekyll-seo-tag (~> 2.0)
|
jekyll-seo-tag (~> 2.0)
|
||||||
jekyll-theme-hacker (0.1.1)
|
jekyll-theme-hacker (0.1.2)
|
||||||
jekyll (~> 3.5)
|
jekyll (> 3.5, < 5.0)
|
||||||
jekyll-seo-tag (~> 2.0)
|
jekyll-seo-tag (~> 2.0)
|
||||||
jekyll-theme-leap-day (0.1.1)
|
jekyll-theme-leap-day (0.1.1)
|
||||||
jekyll (~> 3.5)
|
jekyll (~> 3.5)
|
||||||
|
@ -170,8 +183,8 @@ GEM
|
||||||
jekyll-theme-modernist (0.1.1)
|
jekyll-theme-modernist (0.1.1)
|
||||||
jekyll (~> 3.5)
|
jekyll (~> 3.5)
|
||||||
jekyll-seo-tag (~> 2.0)
|
jekyll-seo-tag (~> 2.0)
|
||||||
jekyll-theme-primer (0.5.3)
|
jekyll-theme-primer (0.5.4)
|
||||||
jekyll (~> 3.5)
|
jekyll (> 3.5, < 5.0)
|
||||||
jekyll-github-metadata (~> 2.9)
|
jekyll-github-metadata (~> 2.9)
|
||||||
jekyll-seo-tag (~> 2.0)
|
jekyll-seo-tag (~> 2.0)
|
||||||
jekyll-theme-slate (0.1.1)
|
jekyll-theme-slate (0.1.1)
|
||||||
|
@ -183,71 +196,82 @@ GEM
|
||||||
jekyll-theme-time-machine (0.1.1)
|
jekyll-theme-time-machine (0.1.1)
|
||||||
jekyll (~> 3.5)
|
jekyll (~> 3.5)
|
||||||
jekyll-seo-tag (~> 2.0)
|
jekyll-seo-tag (~> 2.0)
|
||||||
jekyll-titles-from-headings (0.5.1)
|
jekyll-titles-from-headings (0.5.3)
|
||||||
jekyll (~> 3.3)
|
jekyll (>= 3.3, < 5.0)
|
||||||
jekyll-watch (2.0.0)
|
jekyll-watch (2.2.1)
|
||||||
listen (~> 3.0)
|
listen (~> 3.0)
|
||||||
jemoji (0.9.0)
|
jemoji (0.12.0)
|
||||||
activesupport (~> 4.0, >= 4.2.9)
|
|
||||||
gemoji (~> 3.0)
|
gemoji (~> 3.0)
|
||||||
html-pipeline (~> 2.2)
|
html-pipeline (~> 2.2)
|
||||||
jekyll (~> 3.0)
|
jekyll (>= 3.0, < 5.0)
|
||||||
kramdown (1.16.2)
|
kramdown (2.3.1)
|
||||||
liquid (4.0.0)
|
rexml
|
||||||
listen (3.1.5)
|
kramdown-parser-gfm (1.1.0)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
kramdown (~> 2.0)
|
||||||
rb-inotify (~> 0.9, >= 0.9.7)
|
liquid (4.0.3)
|
||||||
ruby_dep (~> 1.2)
|
listen (3.5.1)
|
||||||
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
mercenary (0.3.6)
|
mercenary (0.3.6)
|
||||||
mini_portile2 (2.3.0)
|
mini_portile2 (2.6.1)
|
||||||
minima (2.4.1)
|
minima (2.5.1)
|
||||||
jekyll (~> 3.5)
|
jekyll (>= 3.5, < 5.0)
|
||||||
jekyll-feed (~> 0.9)
|
jekyll-feed (~> 0.9)
|
||||||
jekyll-seo-tag (~> 2.1)
|
jekyll-seo-tag (~> 2.1)
|
||||||
minitest (5.11.3)
|
minitest (5.14.4)
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.1.1)
|
||||||
nokogiri (1.8.3)
|
nokogiri (1.12.5)
|
||||||
mini_portile2 (~> 2.3.0)
|
mini_portile2 (~> 2.6.1)
|
||||||
octokit (4.9.0)
|
racc (~> 1.4)
|
||||||
|
octokit (4.21.0)
|
||||||
|
faraday (>= 0.9)
|
||||||
sawyer (~> 0.8.0, >= 0.5.3)
|
sawyer (~> 0.8.0, >= 0.5.3)
|
||||||
pathutil (0.16.1)
|
pathutil (0.16.2)
|
||||||
forwardable-extended (~> 2.6)
|
forwardable-extended (~> 2.6)
|
||||||
public_suffix (2.0.5)
|
public_suffix (4.0.6)
|
||||||
rb-fsevent (0.10.3)
|
racc (1.5.2)
|
||||||
rb-inotify (0.9.10)
|
rb-fsevent (0.11.0)
|
||||||
ffi (>= 0.5.0, < 2)
|
rb-inotify (0.10.1)
|
||||||
rouge (2.2.1)
|
ffi (~> 1.0)
|
||||||
ruby-enum (0.7.2)
|
rexml (3.2.5)
|
||||||
|
rouge (3.26.0)
|
||||||
|
ruby-enum (0.9.0)
|
||||||
i18n
|
i18n
|
||||||
ruby_dep (1.5.0)
|
ruby2_keywords (0.0.4)
|
||||||
rubyzip (1.2.1)
|
rubyzip (2.3.0)
|
||||||
safe_yaml (1.0.4)
|
safe_yaml (1.0.5)
|
||||||
sass (3.5.6)
|
sass (3.7.4)
|
||||||
sass-listen (~> 4.0.0)
|
sass-listen (~> 4.0.0)
|
||||||
sass-listen (4.0.0)
|
sass-listen (4.0.0)
|
||||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
rb-inotify (~> 0.9, >= 0.9.7)
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
sawyer (0.8.1)
|
sawyer (0.8.2)
|
||||||
addressable (>= 2.3.5, < 2.6)
|
addressable (>= 2.3.5)
|
||||||
faraday (~> 0.8, < 1.0)
|
faraday (> 0.8, < 2.0)
|
||||||
|
simpleidn (0.2.1)
|
||||||
|
unf (~> 0.1.4)
|
||||||
terminal-table (1.8.0)
|
terminal-table (1.8.0)
|
||||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||||
thread_safe (0.3.6)
|
thread_safe (0.3.6)
|
||||||
typhoeus (1.3.0)
|
typhoeus (1.4.0)
|
||||||
ethon (>= 0.9.0)
|
ethon (>= 0.9.0)
|
||||||
tzinfo (1.2.5)
|
tzinfo (1.2.9)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
unicode-display_width (1.4.0)
|
unf (0.1.4)
|
||||||
|
unf_ext
|
||||||
|
unf_ext (0.0.7.7)
|
||||||
|
unicode-display_width (1.7.0)
|
||||||
|
zeitwerk (2.4.2)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
github-pages (~> 186)
|
github-pages (~> 215)
|
||||||
jekyll-commonmark-ghpages (~> 0.1.5)
|
jekyll-commonmark-ghpages (~> 0.1.6)
|
||||||
jekyll-feed (~> 0.9.3)
|
jekyll-feed (~> 0.15.1)
|
||||||
minima (~> 2.0)
|
minima (~> 2.5.1)
|
||||||
tzinfo-data
|
tzinfo-data
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
1.16.2
|
2.2.21
|
||||||
|
|
18
docs/README.md
Normal file
18
docs/README.md
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Project Mentat Documentation Site
|
||||||
|
|
||||||
|
This site is a place to provide the users of Mentat with all the documentation, examples and tutorials required in order to use Mentat inside a project.
|
||||||
|
|
||||||
|
This site will contain the following:
|
||||||
|
|
||||||
|
- API Documentation for Mentat and it's SDKs.
|
||||||
|
- Tutorials for cross compilation of Mentat for other platforms. (Coming)
|
||||||
|
- Examples of how to design data for storage in Mentat.
|
||||||
|
- Examples of how to use Mentat and it's SDKs. (Coming)
|
||||||
|
- Quick Start Guides for installing and using Mentat. (Coming)
|
||||||
|
|
||||||
|
# Build and run locally
|
||||||
|
|
||||||
|
1. Install [Jekyll](https://jekyllrb.com/docs/installation/)
|
||||||
|
2. `cd docs`
|
||||||
|
3. `bundle exec jekyll serve --incremental`
|
||||||
|
4. open local docs site at http://127.0.0.1:4000/
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>All Classes</title>
|
<title>All Classes</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="script.js"></script>
|
<script type="text/javascript" src="script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -12,9 +12,6 @@
|
||||||
<h1 class="bar">All Classes</h1>
|
<h1 class="bar">All Classes</h1>
|
||||||
<div class="indexContainer">
|
<div class="indexContainer">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat" target="classFrame">AttributeList</a></li>
|
|
||||||
<li><a href="org/mozilla/mentat/AttributeList.ByReference.html" title="class in org.mozilla.mentat" target="classFrame">AttributeList.ByReference</a></li>
|
|
||||||
<li><a href="org/mozilla/mentat/AttributeList.ByValue.html" title="class in org.mozilla.mentat" target="classFrame">AttributeList.ByValue</a></li>
|
|
||||||
<li><a href="org/mozilla/mentat/CacheDirection.html" title="enum in org.mozilla.mentat" target="classFrame">CacheDirection</a></li>
|
<li><a href="org/mozilla/mentat/CacheDirection.html" title="enum in org.mozilla.mentat" target="classFrame">CacheDirection</a></li>
|
||||||
<li><a href="org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat" target="classFrame">CollResult</a></li>
|
<li><a href="org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat" target="classFrame">CollResult</a></li>
|
||||||
<li><a href="org/mozilla/mentat/CollResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">CollResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/CollResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">CollResultHandler</span></a></li>
|
||||||
|
@ -26,14 +23,25 @@
|
||||||
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat" target="classFrame">InProgressTransactionResult.ByReference</a></li>
|
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat" target="classFrame">InProgressTransactionResult.ByReference</a></li>
|
||||||
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat" target="classFrame">InProgressTransactionResult.ByValue</a></li>
|
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat" target="classFrame">InProgressTransactionResult.ByValue</a></li>
|
||||||
<li><a href="org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">JNA</span></a></li>
|
<li><a href="org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">JNA</span></a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat" target="classFrame">JNA.EntityBuilder</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat" target="classFrame">JNA.InProgress</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat" target="classFrame">JNA.InProgressBuilder</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.QueryBuilder.html" title="class in org.mozilla.mentat" target="classFrame">JNA.QueryBuilder</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.RelResult.html" title="class in org.mozilla.mentat" target="classFrame">JNA.RelResult</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.RelResultIter.html" title="class in org.mozilla.mentat" target="classFrame">JNA.RelResultIter</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.Store.html" title="class in org.mozilla.mentat" target="classFrame">JNA.Store</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TxReport.html" title="class in org.mozilla.mentat" target="classFrame">JNA.TxReport</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat" target="classFrame">JNA.TypedValue</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TypedValueList.html" title="class in org.mozilla.mentat" target="classFrame">JNA.TypedValueList</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TypedValueListIter.html" title="class in org.mozilla.mentat" target="classFrame">JNA.TypedValueListIter</a></li>
|
||||||
<li><a href="org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat" target="classFrame">Mentat</a></li>
|
<li><a href="org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat" target="classFrame">Mentat</a></li>
|
||||||
<li><a href="org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat" target="classFrame">Query</a></li>
|
<li><a href="org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat" target="classFrame">Query</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat" target="classFrame">RelResult</a></li>
|
<li><a href="org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat" target="classFrame">RelResult</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RelResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">RelResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/RelResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">RelResultHandler</span></a></li>
|
||||||
<li><a href="org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat" target="classFrame">RelResultIterator</a></li>
|
<li><a href="org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat" target="classFrame">RelResultIterator</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat" target="classFrame">RustResult</a></li>
|
<li><a href="org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat" target="classFrame">RustError</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RustResult.ByReference.html" title="class in org.mozilla.mentat" target="classFrame">RustResult.ByReference</a></li>
|
<li><a href="org/mozilla/mentat/RustError.ByReference.html" title="class in org.mozilla.mentat" target="classFrame">RustError.ByReference</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RustResult.ByValue.html" title="class in org.mozilla.mentat" target="classFrame">RustResult.ByValue</a></li>
|
<li><a href="org/mozilla/mentat/RustError.ByValue.html" title="class in org.mozilla.mentat" target="classFrame">RustError.ByValue</a></li>
|
||||||
<li><a href="org/mozilla/mentat/ScalarResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">ScalarResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/ScalarResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">ScalarResultHandler</span></a></li>
|
||||||
<li><a href="org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat" target="classFrame">TupleResult</a></li>
|
<li><a href="org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat" target="classFrame">TupleResult</a></li>
|
||||||
<li><a href="org/mozilla/mentat/TupleResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">TupleResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/TupleResultHandler.html" title="interface in org.mozilla.mentat" target="classFrame"><span class="interfaceName">TupleResultHandler</span></a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>All Classes</title>
|
<title>All Classes</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="script.js"></script>
|
<script type="text/javascript" src="script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -12,9 +12,6 @@
|
||||||
<h1 class="bar">All Classes</h1>
|
<h1 class="bar">All Classes</h1>
|
||||||
<div class="indexContainer">
|
<div class="indexContainer">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat">AttributeList</a></li>
|
|
||||||
<li><a href="org/mozilla/mentat/AttributeList.ByReference.html" title="class in org.mozilla.mentat">AttributeList.ByReference</a></li>
|
|
||||||
<li><a href="org/mozilla/mentat/AttributeList.ByValue.html" title="class in org.mozilla.mentat">AttributeList.ByValue</a></li>
|
|
||||||
<li><a href="org/mozilla/mentat/CacheDirection.html" title="enum in org.mozilla.mentat">CacheDirection</a></li>
|
<li><a href="org/mozilla/mentat/CacheDirection.html" title="enum in org.mozilla.mentat">CacheDirection</a></li>
|
||||||
<li><a href="org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat">CollResult</a></li>
|
<li><a href="org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat">CollResult</a></li>
|
||||||
<li><a href="org/mozilla/mentat/CollResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">CollResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/CollResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">CollResultHandler</span></a></li>
|
||||||
|
@ -26,14 +23,25 @@
|
||||||
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByReference</a></li>
|
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByReference</a></li>
|
||||||
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByValue</a></li>
|
<li><a href="org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByValue</a></li>
|
||||||
<li><a href="org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat"><span class="interfaceName">JNA</span></a></li>
|
<li><a href="org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat"><span class="interfaceName">JNA</span></a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat">JNA.EntityBuilder</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat">JNA.InProgressBuilder</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.QueryBuilder.html" title="class in org.mozilla.mentat">JNA.QueryBuilder</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.RelResult.html" title="class in org.mozilla.mentat">JNA.RelResult</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.RelResultIter.html" title="class in org.mozilla.mentat">JNA.RelResultIter</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.Store.html" title="class in org.mozilla.mentat">JNA.Store</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TxReport.html" title="class in org.mozilla.mentat">JNA.TxReport</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat">JNA.TypedValue</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TypedValueList.html" title="class in org.mozilla.mentat">JNA.TypedValueList</a></li>
|
||||||
|
<li><a href="org/mozilla/mentat/JNA.TypedValueListIter.html" title="class in org.mozilla.mentat">JNA.TypedValueListIter</a></li>
|
||||||
<li><a href="org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></li>
|
<li><a href="org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></li>
|
||||||
<li><a href="org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></li>
|
<li><a href="org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></li>
|
<li><a href="org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RelResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">RelResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/RelResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">RelResultHandler</span></a></li>
|
||||||
<li><a href="org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></li>
|
<li><a href="org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat">RustResult</a></li>
|
<li><a href="org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RustResult.ByReference.html" title="class in org.mozilla.mentat">RustResult.ByReference</a></li>
|
<li><a href="org/mozilla/mentat/RustError.ByReference.html" title="class in org.mozilla.mentat">RustError.ByReference</a></li>
|
||||||
<li><a href="org/mozilla/mentat/RustResult.ByValue.html" title="class in org.mozilla.mentat">RustResult.ByValue</a></li>
|
<li><a href="org/mozilla/mentat/RustError.ByValue.html" title="class in org.mozilla.mentat">RustError.ByValue</a></li>
|
||||||
<li><a href="org/mozilla/mentat/ScalarResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">ScalarResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/ScalarResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">ScalarResultHandler</span></a></li>
|
||||||
<li><a href="org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></li>
|
<li><a href="org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></li>
|
||||||
<li><a href="org/mozilla/mentat/TupleResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">TupleResultHandler</span></a></li>
|
<li><a href="org/mozilla/mentat/TupleResultHandler.html" title="interface in org.mozilla.mentat"><span class="interfaceName">TupleResultHandler</span></a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>Constant Field Values</title>
|
<title>Constant Field Values</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="script.js"></script>
|
<script type="text/javascript" src="script.js"></script>
|
||||||
</head>
|
</head>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>Deprecated List</title>
|
<title>Deprecated List</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="script.js"></script>
|
<script type="text/javascript" src="script.js"></script>
|
||||||
</head>
|
</head>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>API Help</title>
|
<title>API Help</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="script.js"></script>
|
<script type="text/javascript" src="script.js"></script>
|
||||||
</head>
|
</head>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>A-Index</title>
|
<title>A-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:A">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:A">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">A</h2>
|
<h2 class="title">A</h2>
|
||||||
|
@ -136,6 +136,10 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Asserts the value of attribute `keyword` to be the provided `value`.</div>
|
<div class="block">Asserts the value of attribute `keyword` to be the provided `value`.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ColResultIterator.html#advanceIterator--">advanceIterator()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResultIterator.html#advanceIterator--">advanceIterator()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TupleResult.html#asBool-java.lang.Integer-">asBool(Integer)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TupleResult.html#asBool-java.lang.Integer-">asBool(Integer)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Return the <a href="https://developer.android.com/reference/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a> at the specified index.</div>
|
<div class="block">Return the <a href="https://developer.android.com/reference/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang"><code>Boolean</code></a> at the specified index.</div>
|
||||||
|
@ -200,21 +204,8 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">This value as a <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util"><code>UUID</code></a>.</div>
|
<div class="block">This value as a <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util"><code>UUID</code></a>.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="../org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat"><span class="typeNameLink">AttributeList</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
|
||||||
<dd>
|
|
||||||
<div class="block">Represents a C struct of a list of Strings containing attributes in the format
|
|
||||||
`:namespace/name`.</div>
|
|
||||||
</dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.html#AttributeList--">AttributeList()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat">AttributeList</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><a href="../org/mozilla/mentat/AttributeList.ByReference.html" title="class in org.mozilla.mentat"><span class="typeNameLink">AttributeList.ByReference</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><a href="../org/mozilla/mentat/AttributeList.ByValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">AttributeList.ByValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.html#attributes">attributes</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat">AttributeList</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>J-Index</title>
|
<title>J-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-8.html">Prev Letter</a></li>
|
<li><a href="index-9.html">Prev Letter</a></li>
|
||||||
<li><a href="index-10.html">Next Letter</a></li>
|
<li><a href="index-11.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-9.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-10.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-9.html" target="_top">No Frames</a></li>
|
<li><a href="index-10.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_top">
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:J">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:J">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">J</h2>
|
<h2 class="title">J</h2>
|
||||||
|
@ -77,12 +77,34 @@
|
||||||
<div class="block">JNA interface for FFI to Mentat's Rust library
|
<div class="block">JNA interface for FFI to Mentat's Rust library
|
||||||
Each function definition here link directly to a function in Mentat's FFI crate.</div>
|
Each function definition here link directly to a function in Mentat's FFI crate.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.EntityBuilder</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.InProgress</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.InProgressBuilder</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.QueryBuilder.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.QueryBuilder</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.RelResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.RelResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.RelResultIter.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.RelResultIter</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.Store.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.Store</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.TxReport.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.TxReport</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.TypedValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.TypedValueList.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.TypedValueList</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/JNA.TypedValueListIter.html" title="class in org.mozilla.mentat"><span class="typeNameLink">JNA.TypedValueListIter</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#JNA_LIBRARY_NAME">JNA_LIBRARY_NAME</a></span> - Static variable in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#JNA_LIBRARY_NAME">JNA_LIBRARY_NAME</a></span> - Static variable in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#JNA_NATIVE_LIB">JNA_NATIVE_LIB</a></span> - Static variable in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#JNA_NATIVE_LIB">JNA_NATIVE_LIB</a></span> - Static variable in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@ -102,12 +124,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-8.html">Prev Letter</a></li>
|
<li><a href="index-9.html">Prev Letter</a></li>
|
||||||
<li><a href="index-10.html">Next Letter</a></li>
|
<li><a href="index-11.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-9.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-10.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-9.html" target="_top">No Frames</a></li>
|
<li><a href="index-10.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_bottom">
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>L-Index</title>
|
<title>L-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-9.html">Prev Letter</a></li>
|
<li><a href="index-10.html">Prev Letter</a></li>
|
||||||
<li><a href="index-11.html">Next Letter</a></li>
|
<li><a href="index-12.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-10.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-11.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-10.html" target="_top">No Frames</a></li>
|
<li><a href="index-11.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_top">
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
@ -67,17 +67,15 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:L">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:L">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">L</h2>
|
<h2 class="title">L</h2>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.html#len">len</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat">AttributeList</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.html#len">len</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.html" title="class in org.mozilla.mentat">TxChangeList</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.html#len">len</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.html" title="class in org.mozilla.mentat">TxChangeList</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@ -97,12 +95,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-9.html">Prev Letter</a></li>
|
<li><a href="index-10.html">Prev Letter</a></li>
|
||||||
<li><a href="index-11.html">Next Letter</a></li>
|
<li><a href="index-12.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-10.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-11.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-10.html" target="_top">No Frames</a></li>
|
<li><a href="index-11.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_bottom">
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>M-Index</title>
|
<title>M-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-10.html">Prev Letter</a></li>
|
<li><a href="index-11.html">Prev Letter</a></li>
|
||||||
<li><a href="index-12.html">Next Letter</a></li>
|
<li><a href="index-13.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-11.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-12.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-11.html" target="_top">No Frames</a></li>
|
<li><a href="index-12.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_top">
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:M">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:M">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">M</h2>
|
<h2 class="title">M</h2>
|
||||||
|
@ -87,12 +87,14 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Open a connection to an in-memory Store.</div>
|
<div class="block">Open a connection to an in-memory Store.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#Mentat-com.sun.jna.Pointer-">Mentat(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#Mentat-org.mozilla.mentat.JNA.Store-">Mentat(JNA.Store)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Create a new Mentat with the provided pointer to a Mentat Store</div>
|
<div class="block">Create a new Mentat with the provided pointer to a Mentat Store</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#message">message</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@ -112,12 +114,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-10.html">Prev Letter</a></li>
|
<li><a href="index-11.html">Prev Letter</a></li>
|
||||||
<li><a href="index-12.html">Next Letter</a></li>
|
<li><a href="index-13.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-11.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-12.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-11.html" target="_top">No Frames</a></li>
|
<li><a href="index-12.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_bottom">
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>O-Index</title>
|
<title>O-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,17 +67,15 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:O">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:O">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">O</h2>
|
<h2 class="title">O</h2>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.html#ok">ok</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat">RustResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a> - package org.mozilla.mentat</dt>
|
<dt><a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a> - package org.mozilla.mentat</dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>Q-Index</title>
|
<title>Q-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:Q">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:Q">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">Q</h2>
|
<h2 class="title">Q</h2>
|
||||||
|
@ -80,38 +80,40 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">This class allows you to construct a query, bind values to variables and run those queries against a mentat DB.</div>
|
<div class="block">This class allows you to construct a query, bind values to variables and run those queries against a mentat DB.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#Query-com.sun.jna.Pointer-">Query(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#Query-org.mozilla.mentat.JNA.QueryBuilder-">Query(JNA.QueryBuilder)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_boolean-com.sun.jna.Pointer-java.lang.String-int-">query_builder_bind_boolean(Pointer, String, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_boolean-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-int-">query_builder_bind_boolean(JNA.QueryBuilder, String, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_double-com.sun.jna.Pointer-java.lang.String-double-">query_builder_bind_double(Pointer, String, double)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_double-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-double-">query_builder_bind_double(JNA.QueryBuilder, String, double)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_kw-com.sun.jna.Pointer-java.lang.String-java.lang.String-">query_builder_bind_kw(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_kw-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-java.lang.String-">query_builder_bind_kw(JNA.QueryBuilder, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_long-com.sun.jna.Pointer-java.lang.String-long-">query_builder_bind_long(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_long-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-long-">query_builder_bind_long(JNA.QueryBuilder, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_ref-com.sun.jna.Pointer-java.lang.String-long-">query_builder_bind_ref(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_ref-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-long-">query_builder_bind_ref(JNA.QueryBuilder, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_ref_kw-com.sun.jna.Pointer-java.lang.String-java.lang.String-">query_builder_bind_ref_kw(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_ref_kw-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-java.lang.String-">query_builder_bind_ref_kw(JNA.QueryBuilder, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_string-com.sun.jna.Pointer-java.lang.String-java.lang.String-">query_builder_bind_string(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_string-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-java.lang.String-">query_builder_bind_string(JNA.QueryBuilder, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_timestamp-com.sun.jna.Pointer-java.lang.String-long-">query_builder_bind_timestamp(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_timestamp-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-long-">query_builder_bind_timestamp(JNA.QueryBuilder, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_uuid-com.sun.jna.Pointer-java.lang.String-com.sun.jna.Pointer-">query_builder_bind_uuid(Pointer, String, Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_bind_uuid-org.mozilla.mentat.JNA.QueryBuilder-java.lang.String-com.sun.jna.Pointer-">query_builder_bind_uuid(JNA.QueryBuilder, String, Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_destroy-com.sun.jna.Pointer-">query_builder_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_destroy-org.mozilla.mentat.JNA.QueryBuilder-">query_builder_destroy(JNA.QueryBuilder)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute-com.sun.jna.Pointer-">query_builder_execute(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute-org.mozilla.mentat.JNA.QueryBuilder-org.mozilla.mentat.RustError.ByReference-">query_builder_execute(JNA.QueryBuilder, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute_coll-com.sun.jna.Pointer-">query_builder_execute_coll(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute_coll-org.mozilla.mentat.JNA.QueryBuilder-org.mozilla.mentat.RustError.ByReference-">query_builder_execute_coll(JNA.QueryBuilder, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute_scalar-com.sun.jna.Pointer-">query_builder_execute_scalar(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute_scalar-org.mozilla.mentat.JNA.QueryBuilder-org.mozilla.mentat.RustError.ByReference-">query_builder_execute_scalar(JNA.QueryBuilder, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute_tuple-com.sun.jna.Pointer-">query_builder_execute_tuple(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#query_builder_execute_tuple-org.mozilla.mentat.JNA.QueryBuilder-org.mozilla.mentat.RustError.ByReference-">query_builder_execute_tuple(JNA.QueryBuilder, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.QueryBuilder.html#QueryBuilder--">QueryBuilder()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.QueryBuilder.html" title="class in org.mozilla.mentat">JNA.QueryBuilder</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>R-Index</title>
|
<title>R-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:R">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:R">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">R</h2>
|
<h2 class="title">R</h2>
|
||||||
|
@ -76,24 +76,26 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Register an callback and a set of attributes to observer for transaction observation.</div>
|
<div class="block">Register an callback and a set of attributes to observer for transaction observation.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.RelResult.html#RelResult--">RelResult()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.RelResult.html" title="class in org.mozilla.mentat">JNA.RelResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RelResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RelResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Wraps a `Rel` result from a Mentat query.</div>
|
<div class="block">Wraps a `Rel` result from a Mentat query.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#RelResult-com.sun.jna.Pointer-">RelResult(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#RelResult-org.mozilla.mentat.JNA.RelResult-">RelResult(JNA.RelResult)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/RelResultHandler.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">RelResultHandler</span></a> - Interface in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/RelResultHandler.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">RelResultHandler</span></a> - Interface in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Interface defining the structure of a callback from a query returning a <a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat"><code>RelResult</code></a>.</div>
|
<div class="block">Interface defining the structure of a callback from a query returning a <a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat"><code>RelResult</code></a>.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.RelResultIter.html#RelResultIter--">RelResultIter()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.RelResultIter.html" title="class in org.mozilla.mentat">JNA.RelResultIter</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RelResultIterator</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RelResultIterator</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Iterator for a <a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat"><code>RelResult</code></a></div>
|
<div class="block">Iterator for a <a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat"><code>RelResult</code></a></div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.html#reports">reports</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.html" title="class in org.mozilla.mentat">TxChangeList</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.html#reports">reports</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.html" title="class in org.mozilla.mentat">TxChangeList</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#result">result</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/EntityBuilder.html#retract-java.lang.String-long-">retract(String, long)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat">EntityBuilder</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/EntityBuilder.html#retract-java.lang.String-long-">retract(String, long)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat">EntityBuilder</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Retracts the value of attribute `keyword` from the provided `value`.</div>
|
<div class="block">Retracts the value of attribute `keyword` from the provided `value`.</div>
|
||||||
|
@ -163,24 +165,46 @@
|
||||||
<div class="block">Rolls back all the transacts that have been performed on this `InProgress`, either directly
|
<div class="block">Rolls back all the transacts that have been performed on this `InProgress`, either directly
|
||||||
or through a Builder.</div>
|
or through a Builder.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#row_at_index-com.sun.jna.Pointer-int-">row_at_index(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#row_at_index-org.mozilla.mentat.JNA.RelResult-int-">row_at_index(JNA.RelResult, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#rowAtIndex-int-">rowAtIndex(int)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#rowAtIndex-int-">rowAtIndex(int)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Fetch the row at the requested index.</div>
|
<div class="block">Fetch the row at the requested index.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="../org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RustResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#run-org.mozilla.mentat.RelResultHandler-">run(RelResultHandler)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Execute the query with the values bound associated with this <a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat"><code>Query</code></a> and call the provided
|
||||||
|
callback function with the results as a list of rows of <a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><code>TypedValue</code></a>s.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#run-org.mozilla.mentat.ScalarResultHandler-">run(ScalarResultHandler)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Execute the query with the values bound associated with this <a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat"><code>Query</code></a> and call the provided
|
||||||
|
callback function with the results with the result as a single <a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><code>TypedValue</code></a>.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#run-org.mozilla.mentat.CollResultHandler-">run(CollResultHandler)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Execute the query with the values bound associated with this <a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat"><code>Query</code></a> and call the provided
|
||||||
|
callback function with the results with the result as a list of single <a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><code>TypedValue</code></a>s.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#run-org.mozilla.mentat.TupleResultHandler-">run(TupleResultHandler)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Execute the query with the values bound associated with this <a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat"><code>Query</code></a> and call the provided
|
||||||
|
callback function with the results with the result as a list of single <a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><code>TypedValue</code></a>s.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#rust_c_string_destroy-com.sun.jna.Pointer-">rust_c_string_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RustError</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Represents a C struct containing a <code>Pointer</code>s and String that map to a Rust Result.</div>
|
<div class="block">Represents a C struct containing a <code>Pointer</code>s and String that map to a Rust Result.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.html#RustResult--">RustResult()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat">RustResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#RustError--">RustError()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/RustResult.ByReference.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RustResult.ByReference</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/RustError.ByReference.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RustError.ByReference</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/RustResult.ByValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RustResult.ByValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/RustError.ByValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">RustError.ByValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>S-Index</title>
|
<title>S-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:S">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:S">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">S</h2>
|
<h2 class="title">S</h2>
|
||||||
|
@ -76,40 +76,40 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Interface defining the structure of a callback from a query returning a single <a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><code>TypedValue</code></a>.</div>
|
<div class="block">Interface defining the structure of a callback from a query returning a single <a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><code>TypedValue</code></a>.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_begin_transaction-com.sun.jna.Pointer-">store_begin_transaction(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.Store.html#Store--">Store()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.Store.html" title="class in org.mozilla.mentat">JNA.Store</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_cache_attribute_bi_directional-com.sun.jna.Pointer-java.lang.String-">store_cache_attribute_bi_directional(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_begin_transaction-org.mozilla.mentat.JNA.Store-org.mozilla.mentat.RustError.ByReference-">store_begin_transaction(JNA.Store, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_cache_attribute_forward-com.sun.jna.Pointer-java.lang.String-">store_cache_attribute_forward(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_cache_attribute_bi_directional-org.mozilla.mentat.JNA.Store-java.lang.String-org.mozilla.mentat.RustError.ByReference-">store_cache_attribute_bi_directional(JNA.Store, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_cache_attribute_reverse-com.sun.jna.Pointer-java.lang.String-">store_cache_attribute_reverse(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_cache_attribute_forward-org.mozilla.mentat.JNA.Store-java.lang.String-org.mozilla.mentat.RustError.ByReference-">store_cache_attribute_forward(JNA.Store, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_destroy-com.sun.jna.Pointer-">store_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_cache_attribute_reverse-org.mozilla.mentat.JNA.Store-java.lang.String-org.mozilla.mentat.RustError.ByReference-">store_cache_attribute_reverse(JNA.Store, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_entid_for_attribute-com.sun.jna.Pointer-java.lang.String-">store_entid_for_attribute(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_destroy-org.mozilla.mentat.JNA.Store-">store_destroy(JNA.Store)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_entity_builder_from_entid-com.sun.jna.Pointer-long-">store_entity_builder_from_entid(Pointer, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_entid_for_attribute-org.mozilla.mentat.JNA.Store-java.lang.String-">store_entid_for_attribute(JNA.Store, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_entity_builder_from_temp_id-com.sun.jna.Pointer-java.lang.String-">store_entity_builder_from_temp_id(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_entity_builder_from_entid-org.mozilla.mentat.JNA.Store-long-org.mozilla.mentat.RustError.ByReference-">store_entity_builder_from_entid(JNA.Store, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_in_progress_builder-com.sun.jna.Pointer-">store_in_progress_builder(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_entity_builder_from_temp_id-org.mozilla.mentat.JNA.Store-java.lang.String-org.mozilla.mentat.RustError.ByReference-">store_entity_builder_from_temp_id(JNA.Store, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_in_progress_builder-org.mozilla.mentat.JNA.Store-org.mozilla.mentat.RustError.ByReference-">store_in_progress_builder(JNA.Store, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_open-java.lang.String-">store_open(String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_open-java.lang.String-">store_open(String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_query-com.sun.jna.Pointer-java.lang.String-">store_query(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_query-org.mozilla.mentat.JNA.Store-java.lang.String-">store_query(JNA.Store, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_register_observer-com.sun.jna.Pointer-java.lang.String-com.sun.jna.Pointer-int-org.mozilla.mentat.TxObserverCallback-">store_register_observer(Pointer, String, Pointer, int, TxObserverCallback)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_register_observer-org.mozilla.mentat.JNA.Store-java.lang.String-com.sun.jna.Pointer-int-org.mozilla.mentat.TxObserverCallback-">store_register_observer(JNA.Store, String, Pointer, int, TxObserverCallback)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_sync-com.sun.jna.Pointer-java.lang.String-java.lang.String-">store_sync(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_transact-org.mozilla.mentat.JNA.Store-java.lang.String-org.mozilla.mentat.RustError.ByReference-">store_transact(JNA.Store, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_transact-com.sun.jna.Pointer-java.lang.String-">store_transact(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_unregister_observer-org.mozilla.mentat.JNA.Store-java.lang.String-">store_unregister_observer(JNA.Store, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_unregister_observer-com.sun.jna.Pointer-java.lang.String-">store_unregister_observer(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_value_for_attribute-org.mozilla.mentat.JNA.Store-long-java.lang.String-org.mozilla.mentat.RustError.ByReference-">store_value_for_attribute(JNA.Store, long, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#store_value_for_attribute-com.sun.jna.Pointer-long-java.lang.String-">store_value_for_attribute(Pointer, long, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>T-Index</title>
|
<title>T-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:T">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:T">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">T</h2>
|
<h2 class="title">T</h2>
|
||||||
|
@ -96,19 +96,19 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Wraps a `Tuple` result from a Mentat query.</div>
|
<div class="block">Wraps a `Tuple` result from a Mentat query.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TupleResult.html#TupleResult-com.sun.jna.Pointer-">TupleResult(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TupleResult.html#TupleResult-org.mozilla.mentat.JNA.TypedValueList-">TupleResult(JNA.TypedValueList)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/TupleResultHandler.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">TupleResultHandler</span></a> - Interface in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/TupleResultHandler.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">TupleResultHandler</span></a> - Interface in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Interface defining the structure of a callback from a query returning a <a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat"><code>TupleResult</code></a>.</div>
|
<div class="block">Interface defining the structure of a callback from a query returning a <a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat"><code>TupleResult</code></a>.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_destroy-com.sun.jna.Pointer-">tx_report_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_destroy-org.mozilla.mentat.JNA.TxReport-">tx_report_destroy(JNA.TxReport)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_entity_for_temp_id-com.sun.jna.Pointer-java.lang.String-">tx_report_entity_for_temp_id(Pointer, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_entity_for_temp_id-org.mozilla.mentat.JNA.TxReport-java.lang.String-">tx_report_entity_for_temp_id(JNA.TxReport, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_get_entid-com.sun.jna.Pointer-">tx_report_get_entid(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_get_entid-org.mozilla.mentat.JNA.TxReport-">tx_report_get_entid(JNA.TxReport)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_get_tx_instant-com.sun.jna.Pointer-">tx_report_get_tx_instant(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#tx_report_get_tx_instant-org.mozilla.mentat.JNA.TxReport-">tx_report_get_tx_instant(JNA.TxReport)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat"><span class="typeNameLink">TxChange</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat"><span class="typeNameLink">TxChange</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
@ -136,56 +136,66 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Protocol to be implemented by any object that wishes to register for transaction observation</div>
|
<div class="block">Protocol to be implemented by any object that wishes to register for transaction observation</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#txReport">txReport</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.TxReport.html#TxReport--">TxReport()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.TxReport.html" title="class in org.mozilla.mentat">JNA.TxReport</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat"><span class="typeNameLink">TxReport</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat"><span class="typeNameLink">TxReport</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">This class wraps a raw pointer than points to a Rust `TxReport` object.</div>
|
<div class="block">This class wraps a raw pointer than points to a Rust `TxReport` object.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxReport.html#TxReport-com.sun.jna.Pointer-">TxReport(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat">TxReport</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxReport.html#TxReport-org.mozilla.mentat.JNA.TxReport-">TxReport(JNA.TxReport)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat">TxReport</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_destroy-com.sun.jna.Pointer-">typed_value_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_destroy-org.mozilla.mentat.JNA.TypedValue-">typed_value_destroy(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_boolean-com.sun.jna.Pointer-">typed_value_into_boolean(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_boolean-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_boolean(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_double-com.sun.jna.Pointer-">typed_value_into_double(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_double-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_double(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_entid-com.sun.jna.Pointer-">typed_value_into_entid(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_entid-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_entid(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_kw-com.sun.jna.Pointer-">typed_value_into_kw(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_kw-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_kw(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_long-com.sun.jna.Pointer-">typed_value_into_long(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_long-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_long(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_string-com.sun.jna.Pointer-">typed_value_into_string(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_string-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_string(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_timestamp-com.sun.jna.Pointer-">typed_value_into_timestamp(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_timestamp-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_timestamp(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_uuid-com.sun.jna.Pointer-">typed_value_into_uuid(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_into_uuid-org.mozilla.mentat.JNA.TypedValue-">typed_value_into_uuid(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_destroy-com.sun.jna.Pointer-">typed_value_list_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_destroy-org.mozilla.mentat.JNA.TypedValueList-">typed_value_list_destroy(JNA.TypedValueList)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_into_iter-com.sun.jna.Pointer-">typed_value_list_into_iter(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_into_iter-org.mozilla.mentat.JNA.TypedValueList-">typed_value_list_into_iter(JNA.TypedValueList)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_iter_destroy-com.sun.jna.Pointer-">typed_value_list_iter_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_iter_destroy-org.mozilla.mentat.JNA.TypedValueListIter-">typed_value_list_iter_destroy(JNA.TypedValueListIter)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_iter_next-com.sun.jna.Pointer-">typed_value_list_iter_next(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_list_iter_next-org.mozilla.mentat.JNA.TypedValueListIter-">typed_value_list_iter_next(JNA.TypedValueListIter)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_destroy-com.sun.jna.Pointer-">typed_value_result_set_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_destroy-org.mozilla.mentat.JNA.RelResult-">typed_value_result_set_destroy(JNA.RelResult)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_into_iter-com.sun.jna.Pointer-">typed_value_result_set_into_iter(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_into_iter-org.mozilla.mentat.JNA.RelResult-">typed_value_result_set_into_iter(JNA.RelResult)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_iter_destroy-com.sun.jna.Pointer-">typed_value_result_set_iter_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_iter_destroy-org.mozilla.mentat.JNA.RelResultIter-">typed_value_result_set_iter_destroy(JNA.RelResultIter)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_iter_next-com.sun.jna.Pointer-">typed_value_result_set_iter_next(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_result_set_iter_next-org.mozilla.mentat.JNA.RelResultIter-">typed_value_result_set_iter_next(JNA.RelResultIter)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_value_type-com.sun.jna.Pointer-">typed_value_value_type(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#typed_value_value_type-org.mozilla.mentat.JNA.TypedValue-">typed_value_value_type(JNA.TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.TypedValue.html#TypedValue--">TypedValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat">JNA.TypedValue</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">TypedValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">TypedValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">A wrapper around Mentat's `TypedValue` Rust object.</div>
|
<div class="block">A wrapper around Mentat's `TypedValue` Rust object.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TypedValue.html#TypedValue-com.sun.jna.Pointer-">TypedValue(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TypedValue.html#TypedValue-org.mozilla.mentat.JNA.TypedValue-">TypedValue(JNA.TypedValue)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.TypedValueList.html#TypedValueList--">TypedValueList()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.TypedValueList.html" title="class in org.mozilla.mentat">JNA.TypedValueList</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.TypedValueListIter.html#TypedValueListIter--">TypedValueListIter()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.TypedValueListIter.html" title="class in org.mozilla.mentat">JNA.TypedValueListIter</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>U-Index</title>
|
<title>U-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:U">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:U">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">U</h2>
|
<h2 class="title">U</h2>
|
||||||
|
@ -77,8 +77,10 @@
|
||||||
<div class="block">Unregister the observer that was registered with the provided key such that it will no longer be called
|
<div class="block">Unregister the observer that was registered with the provided key such that it will no longer be called
|
||||||
if a transaction occurs that affects the attributes that the observer was registered to observe.</div>
|
if a transaction occurs that affects the attributes that the observer was registered to observe.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#uuid_destroy-com.sun.jna.Pointer-">uuid_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>V-Index</title>
|
<title>V-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,28 +67,28 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:V">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:V">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">V</h2>
|
<h2 class="title">V</h2>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index-com.sun.jna.Pointer-int-">value_at_index(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_boolean-com.sun.jna.Pointer-int-">value_at_index_into_boolean(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_boolean-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_boolean(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_double-com.sun.jna.Pointer-int-">value_at_index_into_double(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_double-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_double(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_entid-com.sun.jna.Pointer-int-">value_at_index_into_entid(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_entid-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_entid(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_kw-com.sun.jna.Pointer-int-">value_at_index_into_kw(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_kw-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_kw(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_long-com.sun.jna.Pointer-int-">value_at_index_into_long(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_long-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_long(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_string-com.sun.jna.Pointer-int-">value_at_index_into_string(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_string-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_string(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_timestamp-com.sun.jna.Pointer-int-">value_at_index_into_timestamp(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_timestamp-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_timestamp(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_uuid-com.sun.jna.Pointer-int-">value_at_index_into_uuid(Pointer, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#value_at_index_into_uuid-org.mozilla.mentat.JNA.TypedValueList-int-">value_at_index_into_uuid(JNA.TypedValueList, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#valueForAttributeOfEntity-java.lang.String-long-">valueForAttributeOfEntity(String, long)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#valueForAttributeOfEntity-java.lang.String-long-">valueForAttributeOfEntity(String, long)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
@ -105,7 +105,7 @@
|
||||||
the order they are declared.</div>
|
the order they are declared.</div>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>B-Index</title>
|
<title>B-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:B">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:B">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">B</h2>
|
<h2 class="title">B</h2>
|
||||||
|
@ -78,6 +78,42 @@
|
||||||
|
|
||||||
TODO: Throw an exception if the result contains an error.</div>
|
TODO: Throw an exception if the result contains an error.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bind-java.lang.String-long-">bind(String, long)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a long value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bind-java.lang.String-boolean-">bind(String, boolean)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a boolean value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bind-java.lang.String-double-">bind(String, double)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a double value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bind-java.lang.String-java.util.Date-">bind(String, Date)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a <a href="https://developer.android.com/reference/java/util/Date.html?is-external=true" title="class or interface in java.util"><code>Date</code></a> value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bind-java.lang.String-java.lang.String-">bind(String, String)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a <a href="https://developer.android.com/reference/java/lang/String.html?is-external=true" title="class or interface in java.lang"><code>String</code></a> value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bind-java.lang.String-java.util.UUID-">bind(String, UUID)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util"><code>UUID</code></a> value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bindEntidReference-java.lang.String-long-">bindEntidReference(String, long)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a Entid value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bindKeyword-java.lang.String-java.lang.String-">bindKeyword(String, String)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a keyword value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#bindKeywordReference-java.lang.String-java.lang.String-">bindKeywordReference(String, String)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Binds a String keyword value to the provided variable name.</div>
|
||||||
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgress.html#builder--">builder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat">InProgress</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgress.html#builder--">builder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat">InProgress</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Creates an <a href="../org/mozilla/mentat/InProgressBuilder.html" title="class in org.mozilla.mentat"><code>InProgressBuilder</code></a> using this <a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat"><code>InProgress</code></a> .</div>
|
<div class="block">Creates an <a href="../org/mozilla/mentat/InProgressBuilder.html" title="class in org.mozilla.mentat"><code>InProgressBuilder</code></a> using this <a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat"><code>InProgress</code></a> .</div>
|
||||||
|
@ -90,28 +126,24 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Creates an `EntityBuilder` using this `InProgress` for a new entity with `tempid`.</div>
|
<div class="block">Creates an `EntityBuilder` using this `InProgress` for a new entity with `tempid`.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.ByReference.html" title="class in org.mozilla.mentat">AttributeList.ByReference</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByReference</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByReference</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.ByReference.html" title="class in org.mozilla.mentat">RustResult.ByReference</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.ByReference.html" title="class in org.mozilla.mentat">RustError.ByReference</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.ByReference.html" title="class in org.mozilla.mentat">TxChange.ByReference</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.ByReference.html" title="class in org.mozilla.mentat">TxChange.ByReference</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.ByReference.html" title="class in org.mozilla.mentat">TxChangeList.ByReference</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.ByReference.html#ByReference--">ByReference()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.ByReference.html" title="class in org.mozilla.mentat">TxChangeList.ByReference</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.ByValue.html" title="class in org.mozilla.mentat">AttributeList.ByValue</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByValue</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByValue</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.ByValue.html" title="class in org.mozilla.mentat">RustResult.ByValue</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.ByValue.html" title="class in org.mozilla.mentat">RustError.ByValue</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.ByValue.html" title="class in org.mozilla.mentat">TxChange.ByValue</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.ByValue.html" title="class in org.mozilla.mentat">TxChange.ByValue</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.ByValue.html" title="class in org.mozilla.mentat">TxChangeList.ByValue</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.ByValue.html#ByValue--">ByValue()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.ByValue.html" title="class in org.mozilla.mentat">TxChangeList.ByValue</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>C-Index</title>
|
<title>C-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:C">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:C">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">C</h2>
|
<h2 class="title">C</h2>
|
||||||
|
@ -82,45 +82,11 @@
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.html#changes_len">changes_len</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat">TxChange</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.html#changes_len">changes_len</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat">TxChange</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat">AttributeList</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/CollResult.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat">CollResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ColResultIterator.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/EntityBuilder.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat">EntityBuilder</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgress.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat">InProgress</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressBuilder.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressBuilder.html" title="class in org.mozilla.mentat">InProgressBuilder</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResultIterator.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat">RustResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TupleResult.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat">TxChange</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChangeList.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChangeList.html" title="class in org.mozilla.mentat">TxChangeList</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxReport.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat">TxReport</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TypedValue.html#close--">close()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><a href="../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">CollResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">CollResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Wraps a `Coll` result from a Mentat query.</div>
|
<div class="block">Wraps a `Coll` result from a Mentat query.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/CollResult.html#CollResult-com.sun.jna.Pointer-">CollResult(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat">CollResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/CollResult.html#CollResult-org.mozilla.mentat.JNA.TypedValueList-">CollResult(JNA.TypedValueList)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat">CollResult</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/CollResultHandler.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">CollResultHandler</span></a> - Interface in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/CollResultHandler.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">CollResultHandler</span></a> - Interface in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
@ -143,8 +109,16 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Transacts the added assertions and commits.</div>
|
<div class="block">Transacts the added assertions and commits.</div>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ColResultIterator.html#constructItem-org.mozilla.mentat.JNA.TypedValue-">constructItem(JNA.TypedValue)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResultIterator.html#constructItem-org.mozilla.mentat.JNA.TypedValueList-">constructItem(JNA.TypedValueList)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#consumeErrorMessage--">consumeErrorMessage()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Get and consume the error message, or null if there is none.</div>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
147
docs/apis/0.7/java/index-files/index-4.html
Normal file
147
docs/apis/0.7/java/index-files/index-4.html
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<!-- NewPage -->
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
|
<title>D-Index</title>
|
||||||
|
<meta name="date" content="2018-06-28">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
try {
|
||||||
|
if (location.href.indexOf('is-external=true') == -1) {
|
||||||
|
parent.document.title="D-Index";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<noscript>
|
||||||
|
<div>JavaScript is disabled on your browser.</div>
|
||||||
|
</noscript>
|
||||||
|
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||||
|
<div class="topNav"><a name="navbar.top">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
|
||||||
|
<a name="navbar.top.firstrow">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="navList" title="Navigation">
|
||||||
|
<li><a href="../org/mozilla/mentat/package-summary.html">Package</a></li>
|
||||||
|
<li>Class</li>
|
||||||
|
<li><a href="../overview-tree.html">Tree</a></li>
|
||||||
|
<li><a href="../deprecated-list.html">Deprecated</a></li>
|
||||||
|
<li class="navBarCell1Rev">Index</li>
|
||||||
|
<li><a href="../help-doc.html">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="subNav">
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="index-3.html">Prev Letter</a></li>
|
||||||
|
<li><a href="index-5.html">Next Letter</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../index.html?index-files/index-4.html" target="_top">Frames</a></li>
|
||||||
|
<li><a href="index-4.html" target="_top">No Frames</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||||
|
if(window==top) {
|
||||||
|
allClassesLink.style.display = "block";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allClassesLink.style.display = "none";
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<a name="skip.navbar.top">
|
||||||
|
<!-- -->
|
||||||
|
</a></div>
|
||||||
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:D">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h2 class="title">D</h2>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#destroy-com.sun.jna.Pointer-">destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ColResultIterator.html#destroyPointer-org.mozilla.mentat.JNA.TypedValueListIter-">destroyPointer(JNA.TypedValueListIter)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/EntityBuilder.html#destroyPointer-org.mozilla.mentat.JNA.EntityBuilder-">destroyPointer(JNA.EntityBuilder)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat">EntityBuilder</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgress.html#destroyPointer-org.mozilla.mentat.JNA.InProgress-">destroyPointer(JNA.InProgress)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat">InProgress</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressBuilder.html#destroyPointer-org.mozilla.mentat.JNA.InProgressBuilder-">destroyPointer(JNA.InProgressBuilder)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressBuilder.html" title="class in org.mozilla.mentat">InProgressBuilder</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#destroyPointer-org.mozilla.mentat.JNA.Store-">destroyPointer(JNA.Store)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Query.html#destroyPointer-org.mozilla.mentat.JNA.QueryBuilder-">destroyPointer(JNA.QueryBuilder)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Query.html" title="class in org.mozilla.mentat">Query</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#destroyPointer-org.mozilla.mentat.JNA.RelResult-">destroyPointer(JNA.RelResult)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResultIterator.html#destroyPointer-org.mozilla.mentat.JNA.RelResultIter-">destroyPointer(JNA.RelResultIter)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TupleResult.html#destroyPointer-org.mozilla.mentat.JNA.TypedValueList-">destroyPointer(JNA.TypedValueList)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxReport.html#destroyPointer-org.mozilla.mentat.JNA.TxReport-">destroyPointer(JNA.TxReport)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat">TxReport</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TypedValue.html#destroyPointer-org.mozilla.mentat.JNA.TypedValue-">destroyPointer(JNA.TypedValue)</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
</dl>
|
||||||
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
|
||||||
|
<a name="navbar.bottom.firstrow">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="navList" title="Navigation">
|
||||||
|
<li><a href="../org/mozilla/mentat/package-summary.html">Package</a></li>
|
||||||
|
<li>Class</li>
|
||||||
|
<li><a href="../overview-tree.html">Tree</a></li>
|
||||||
|
<li><a href="../deprecated-list.html">Deprecated</a></li>
|
||||||
|
<li class="navBarCell1Rev">Index</li>
|
||||||
|
<li><a href="../help-doc.html">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="subNav">
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="index-3.html">Prev Letter</a></li>
|
||||||
|
<li><a href="index-5.html">Next Letter</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../index.html?index-files/index-4.html" target="_top">Frames</a></li>
|
||||||
|
<li><a href="index-4.html" target="_top">No Frames</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||||
|
if(window==top) {
|
||||||
|
allClassesLink.style.display = "block";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allClassesLink.style.display = "none";
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<a name="skip.navbar.bottom">
|
||||||
|
<!-- -->
|
||||||
|
</a></div>
|
||||||
|
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>E-Index</title>
|
<title>E-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:E">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:E">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">E</h2>
|
<h2 class="title">E</h2>
|
||||||
|
@ -76,49 +76,51 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Get the the `Entid` of the attribute</div>
|
<div class="block">Get the the `Entid` of the attribute</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_boolean-com.sun.jna.Pointer-java.lang.String-int-">entity_builder_add_boolean(Pointer, String, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_boolean-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-int-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_boolean(JNA.EntityBuilder, String, int, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_double-com.sun.jna.Pointer-java.lang.String-double-">entity_builder_add_double(Pointer, String, double)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_double-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-double-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_double(JNA.EntityBuilder, String, double, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_keyword-com.sun.jna.Pointer-java.lang.String-java.lang.String-">entity_builder_add_keyword(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_keyword-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_keyword(JNA.EntityBuilder, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_long-com.sun.jna.Pointer-java.lang.String-long-">entity_builder_add_long(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_long-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_long(JNA.EntityBuilder, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_ref-com.sun.jna.Pointer-java.lang.String-long-">entity_builder_add_ref(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_ref-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_ref(JNA.EntityBuilder, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_string-com.sun.jna.Pointer-java.lang.String-java.lang.String-">entity_builder_add_string(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_string-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_string(JNA.EntityBuilder, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_timestamp-com.sun.jna.Pointer-java.lang.String-long-">entity_builder_add_timestamp(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_timestamp-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_timestamp(JNA.EntityBuilder, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_uuid-com.sun.jna.Pointer-java.lang.String-com.sun.jna.Pointer-">entity_builder_add_uuid(Pointer, String, Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_add_uuid-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-com.sun.jna.Pointer-org.mozilla.mentat.RustError.ByReference-">entity_builder_add_uuid(JNA.EntityBuilder, String, Pointer, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_commit-com.sun.jna.Pointer-">entity_builder_commit(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_commit-org.mozilla.mentat.JNA.EntityBuilder-org.mozilla.mentat.RustError.ByReference-">entity_builder_commit(JNA.EntityBuilder, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_destroy-com.sun.jna.Pointer-">entity_builder_destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_destroy-org.mozilla.mentat.JNA.EntityBuilder-">entity_builder_destroy(JNA.EntityBuilder)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_boolean-com.sun.jna.Pointer-java.lang.String-int-">entity_builder_retract_boolean(Pointer, String, int)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_boolean-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-int-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_boolean(JNA.EntityBuilder, String, int, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_double-com.sun.jna.Pointer-java.lang.String-double-">entity_builder_retract_double(Pointer, String, double)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_double-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-double-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_double(JNA.EntityBuilder, String, double, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_keyword-com.sun.jna.Pointer-java.lang.String-java.lang.String-">entity_builder_retract_keyword(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_keyword-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_keyword(JNA.EntityBuilder, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_long-com.sun.jna.Pointer-java.lang.String-long-">entity_builder_retract_long(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_long-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_long(JNA.EntityBuilder, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_ref-com.sun.jna.Pointer-java.lang.String-long-">entity_builder_retract_ref(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_ref-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_ref(JNA.EntityBuilder, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_string-com.sun.jna.Pointer-java.lang.String-java.lang.String-">entity_builder_retract_string(Pointer, String, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_string-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_string(JNA.EntityBuilder, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_timestamp-com.sun.jna.Pointer-java.lang.String-long-">entity_builder_retract_timestamp(Pointer, String, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_timestamp-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_timestamp(JNA.EntityBuilder, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_uuid-com.sun.jna.Pointer-java.lang.String-com.sun.jna.Pointer-">entity_builder_retract_uuid(Pointer, String, Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_retract_uuid-org.mozilla.mentat.JNA.EntityBuilder-java.lang.String-com.sun.jna.Pointer-org.mozilla.mentat.RustError.ByReference-">entity_builder_retract_uuid(JNA.EntityBuilder, String, Pointer, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_transact-com.sun.jna.Pointer-">entity_builder_transact(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#entity_builder_transact-org.mozilla.mentat.JNA.EntityBuilder-">entity_builder_transact(JNA.EntityBuilder)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat"><span class="typeNameLink">EntityBuilder</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
<dt><a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat"><span class="typeNameLink">EntityBuilder</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">This class wraps a raw pointer that points to a Rust `EntityBuilder<InProgressBuilder>` object.</div>
|
<div class="block">This class wraps a raw pointer that points to a Rust `EntityBuilder<InProgressBuilder>` object.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/EntityBuilder.html#EntityBuilder-com.sun.jna.Pointer-">EntityBuilder(Pointer)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat">EntityBuilder</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/EntityBuilder.html#EntityBuilder-org.mozilla.mentat.JNA.EntityBuilder-">EntityBuilder(JNA.EntityBuilder)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat">EntityBuilder</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.EntityBuilder.html#EntityBuilder--">EntityBuilder()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat">JNA.EntityBuilder</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#entityBuilder--">entityBuilder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/Mentat.html#entityBuilder--">entityBuilder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/Mentat.html" title="class in org.mozilla.mentat">Mentat</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
@ -135,10 +137,10 @@
|
||||||
<div class="block">Creates a new transaction (<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat"><code>InProgress</code></a>) and returns an <a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat"><code>EntityBuilder</code></a> for a new
|
<div class="block">Creates a new transaction (<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat"><code>InProgress</code></a>) and returns an <a href="../org/mozilla/mentat/EntityBuilder.html" title="class in org.mozilla.mentat"><code>EntityBuilder</code></a> for a new
|
||||||
entity with `tempId` for that transaction.</div>
|
entity with `tempId` for that transaction.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.html#err">err</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat">RustResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#error">error</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>D-Index</title>
|
<title>F-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<script type="text/javascript"><!--
|
<script type="text/javascript"><!--
|
||||||
try {
|
try {
|
||||||
if (location.href.indexOf('is-external=true') == -1) {
|
if (location.href.indexOf('is-external=true') == -1) {
|
||||||
parent.document.title="D-Index";
|
parent.document.title="F-Index";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(err) {
|
catch(err) {
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-3.html">Prev Letter</a></li>
|
<li><a href="index-5.html">Prev Letter</a></li>
|
||||||
<li><a href="index-5.html">Next Letter</a></li>
|
<li><a href="index-7.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-4.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-6.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-4.html" target="_top">No Frames</a></li>
|
<li><a href="index-6.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_top">
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
@ -67,15 +67,17 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:D">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:F">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">D</h2>
|
<h2 class="title">F</h2>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#destroy-com.sun.jna.Pointer-">destroy(Pointer)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#finalize--">finalize()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#finalize--">finalize()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@ -95,12 +97,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-3.html">Prev Letter</a></li>
|
<li><a href="index-5.html">Prev Letter</a></li>
|
||||||
<li><a href="index-5.html">Next Letter</a></li>
|
<li><a href="index-7.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-4.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-6.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-4.html" target="_top">No Frames</a></li>
|
<li><a href="index-6.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_bottom">
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>G-Index</title>
|
<title>G-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-5.html">Prev Letter</a></li>
|
<li><a href="index-6.html">Prev Letter</a></li>
|
||||||
<li><a href="index-7.html">Next Letter</a></li>
|
<li><a href="index-8.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-6.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-7.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-6.html" target="_top">No Frames</a></li>
|
<li><a href="index-7.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_top">
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:G">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:G">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">G</h2>
|
<h2 class="title">G</h2>
|
||||||
|
@ -84,11 +84,13 @@
|
||||||
<dd>
|
<dd>
|
||||||
<div class="block">Access an `Entid` for a temporary identifier that was provided in the transaction.</div>
|
<div class="block">Access an `Entid` for a temporary identifier that was provided in the transaction.</div>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/AttributeList.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/AttributeList.html" title="class in org.mozilla.mentat">AttributeList</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#getErrorMessage--">getErrorMessage()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
<dd> </dd>
|
<dd>
|
||||||
|
<div class="block">Get the error message or null if there is none.</div>
|
||||||
|
</dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustResult.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustResult.html" title="class in org.mozilla.mentat">RustResult</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat">TxChange</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/TxChange.html#getFieldOrder--">getFieldOrder()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/TxChange.html" title="class in org.mozilla.mentat">TxChange</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
|
@ -111,7 +113,7 @@
|
||||||
<div class="block">Get the time that the transaction occured.</div>
|
<div class="block">Get the time that the transaction occured.</div>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@ -131,12 +133,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-5.html">Prev Letter</a></li>
|
<li><a href="index-6.html">Prev Letter</a></li>
|
||||||
<li><a href="index-7.html">Next Letter</a></li>
|
<li><a href="index-8.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-6.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-7.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-6.html" target="_top">No Frames</a></li>
|
<li><a href="index-7.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_bottom">
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>H-Index</title>
|
<title>H-Index</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../script.js"></script>
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -41,12 +41,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-6.html">Prev Letter</a></li>
|
<li><a href="index-7.html">Prev Letter</a></li>
|
||||||
<li><a href="index-8.html">Next Letter</a></li>
|
<li><a href="index-9.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-7.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-8.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-7.html" target="_top">No Frames</a></li>
|
<li><a href="index-8.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_top">
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a></div>
|
</a></div>
|
||||||
<!-- ========= END OF TOP NAVBAR ========= -->
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:H">
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:H">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h2 class="title">H</h2>
|
<h2 class="title">H</h2>
|
||||||
|
@ -80,12 +80,8 @@
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ScalarResultHandler.html#handleValue-org.mozilla.mentat.TypedValue-">handleValue(TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/ScalarResultHandler.html" title="interface in org.mozilla.mentat">ScalarResultHandler</a></dt>
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ScalarResultHandler.html#handleValue-org.mozilla.mentat.TypedValue-">handleValue(TypedValue)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/ScalarResultHandler.html" title="interface in org.mozilla.mentat">ScalarResultHandler</a></dt>
|
||||||
<dd> </dd>
|
<dd> </dd>
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/ColResultIterator.html#hasNext--">hasNext()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResultIterator.html#hasNext--">hasNext()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResultIterator.html" title="class in org.mozilla.mentat">RelResultIterator</a></dt>
|
|
||||||
<dd> </dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">G</a> <a href="index-7.html">H</a> <a href="index-8.html">I</a> <a href="index-9.html">J</a> <a href="index-10.html">L</a> <a href="index-11.html">M</a> <a href="index-12.html">N</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
<div class="bottomNav"><a name="navbar.bottom">
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@ -105,12 +101,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="index-6.html">Prev Letter</a></li>
|
<li><a href="index-7.html">Prev Letter</a></li>
|
||||||
<li><a href="index-8.html">Next Letter</a></li>
|
<li><a href="index-9.html">Next Letter</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../index.html?index-files/index-7.html" target="_top">Frames</a></li>
|
<li><a href="../index.html?index-files/index-8.html" target="_top">Frames</a></li>
|
||||||
<li><a href="index-7.html" target="_top">No Frames</a></li>
|
<li><a href="index-8.html" target="_top">No Frames</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList" id="allclasses_navbar_bottom">
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
215
docs/apis/0.7/java/index-files/index-9.html
Normal file
215
docs/apis/0.7/java/index-files/index-9.html
Normal file
|
@ -0,0 +1,215 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<!-- NewPage -->
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
|
<title>I-Index</title>
|
||||||
|
<meta name="date" content="2018-06-28">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
|
||||||
|
<script type="text/javascript" src="../script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
try {
|
||||||
|
if (location.href.indexOf('is-external=true') == -1) {
|
||||||
|
parent.document.title="I-Index";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<noscript>
|
||||||
|
<div>JavaScript is disabled on your browser.</div>
|
||||||
|
</noscript>
|
||||||
|
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||||
|
<div class="topNav"><a name="navbar.top">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
|
||||||
|
<a name="navbar.top.firstrow">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="navList" title="Navigation">
|
||||||
|
<li><a href="../org/mozilla/mentat/package-summary.html">Package</a></li>
|
||||||
|
<li>Class</li>
|
||||||
|
<li><a href="../overview-tree.html">Tree</a></li>
|
||||||
|
<li><a href="../deprecated-list.html">Deprecated</a></li>
|
||||||
|
<li class="navBarCell1Rev">Index</li>
|
||||||
|
<li><a href="../help-doc.html">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="subNav">
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="index-8.html">Prev Letter</a></li>
|
||||||
|
<li><a href="index-10.html">Next Letter</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../index.html?index-files/index-9.html" target="_top">Frames</a></li>
|
||||||
|
<li><a href="index-9.html" target="_top">No Frames</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||||
|
if(window==top) {
|
||||||
|
allClassesLink.style.display = "block";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allClassesLink.style.display = "none";
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<a name="skip.navbar.top">
|
||||||
|
<!-- -->
|
||||||
|
</a></div>
|
||||||
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
|
<div class="contentContainer"><a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> <a name="I:I">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h2 class="title">I</h2>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder-org.mozilla.mentat.JNA.InProgress-">in_progress_builder(JNA.InProgress)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_boolean-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-int-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_boolean(JNA.InProgressBuilder, long, String, int, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_double-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-double-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_double(JNA.InProgressBuilder, long, String, double, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_keyword-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_keyword(JNA.InProgressBuilder, long, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_long-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_long(JNA.InProgressBuilder, long, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_ref-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_ref(JNA.InProgressBuilder, long, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_string-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_string(JNA.InProgressBuilder, long, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_timestamp-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_timestamp(JNA.InProgressBuilder, long, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_add_uuid-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-com.sun.jna.Pointer-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_add_uuid(JNA.InProgressBuilder, long, String, Pointer, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_commit-org.mozilla.mentat.JNA.InProgressBuilder-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_commit(JNA.InProgressBuilder, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_destroy-org.mozilla.mentat.JNA.InProgressBuilder-">in_progress_builder_destroy(JNA.InProgressBuilder)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_boolean-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-int-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_boolean(JNA.InProgressBuilder, long, String, int, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_double-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-double-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_double(JNA.InProgressBuilder, long, String, double, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_keyword-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_keyword(JNA.InProgressBuilder, long, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_long-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_long(JNA.InProgressBuilder, long, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_ref-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_ref(JNA.InProgressBuilder, long, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_string-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-java.lang.String-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_string(JNA.InProgressBuilder, long, String, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_timestamp-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-long-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_timestamp(JNA.InProgressBuilder, long, String, long, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_retract_uuid-org.mozilla.mentat.JNA.InProgressBuilder-long-java.lang.String-com.sun.jna.Pointer-org.mozilla.mentat.RustError.ByReference-">in_progress_builder_retract_uuid(JNA.InProgressBuilder, long, String, Pointer, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_builder_transact-org.mozilla.mentat.JNA.InProgressBuilder-">in_progress_builder_transact(JNA.InProgressBuilder)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_commit-org.mozilla.mentat.JNA.InProgress-org.mozilla.mentat.RustError.ByReference-">in_progress_commit(JNA.InProgress, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_destroy-org.mozilla.mentat.JNA.InProgress-">in_progress_destroy(JNA.InProgress)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_entity_builder_from_entid-org.mozilla.mentat.JNA.InProgress-long-">in_progress_entity_builder_from_entid(JNA.InProgress, long)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_entity_builder_from_temp_id-org.mozilla.mentat.JNA.InProgress-java.lang.String-">in_progress_entity_builder_from_temp_id(JNA.InProgress, String)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_rollback-org.mozilla.mentat.JNA.InProgress-org.mozilla.mentat.RustError.ByReference-">in_progress_rollback(JNA.InProgress, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#in_progress_transact-org.mozilla.mentat.JNA.InProgress-java.lang.String-org.mozilla.mentat.RustError.ByReference-">in_progress_transact(JNA.InProgress, String, RustError.ByReference)</a></span> - Method in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat"><span class="typeNameLink">InProgress</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">This class wraps a raw pointer that points to a Rust <a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat"><code>InProgress</code></a> object.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgress.html#InProgress-org.mozilla.mentat.JNA.InProgress-">InProgress(JNA.InProgress)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgress.html" title="class in org.mozilla.mentat">InProgress</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a></span> - Variable in class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.InProgress.html#InProgress--">InProgress()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/InProgressBuilder.html" title="class in org.mozilla.mentat"><span class="typeNameLink">InProgressBuilder</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">This class wraps a raw pointer that points to a Rust `InProgressBuilder` object.</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressBuilder.html#InProgressBuilder-org.mozilla.mentat.JNA.InProgressBuilder-">InProgressBuilder(JNA.InProgressBuilder)</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressBuilder.html" title="class in org.mozilla.mentat">InProgressBuilder</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.InProgressBuilder.html#InProgressBuilder--">InProgressBuilder()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat">JNA.InProgressBuilder</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">InProgressTransactionResult</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/InProgressTransactionResult.html#InProgressTransactionResult--">InProgressTransactionResult()</a></span> - Constructor for class org.mozilla.mentat.<a href="../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat"><span class="typeNameLink">InProgressTransactionResult.ByReference</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><a href="../org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">InProgressTransactionResult.ByValue</span></a> - Class in <a href="../org/mozilla/mentat/package-summary.html">org.mozilla.mentat</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/JNA.html#INSTANCE">INSTANCE</a></span> - Static variable in interface org.mozilla.mentat.<a href="../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#isFailure--">isFailure()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Does this represent failure?</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RustError.html#isSuccess--">isSuccess()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></dt>
|
||||||
|
<dd>
|
||||||
|
<div class="block">Does this represent success?</div>
|
||||||
|
</dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/CollResult.html#iterator--">iterator()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat">CollResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
<dt><span class="memberNameLink"><a href="../org/mozilla/mentat/RelResult.html#iterator--">iterator()</a></span> - Method in class org.mozilla.mentat.<a href="../org/mozilla/mentat/RelResult.html" title="class in org.mozilla.mentat">RelResult</a></dt>
|
||||||
|
<dd> </dd>
|
||||||
|
</dl>
|
||||||
|
<a href="index-1.html">A</a> <a href="index-2.html">B</a> <a href="index-3.html">C</a> <a href="index-4.html">D</a> <a href="index-5.html">E</a> <a href="index-6.html">F</a> <a href="index-7.html">G</a> <a href="index-8.html">H</a> <a href="index-9.html">I</a> <a href="index-10.html">J</a> <a href="index-11.html">L</a> <a href="index-12.html">M</a> <a href="index-13.html">O</a> <a href="index-14.html">Q</a> <a href="index-15.html">R</a> <a href="index-16.html">S</a> <a href="index-17.html">T</a> <a href="index-18.html">U</a> <a href="index-19.html">V</a> </div>
|
||||||
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
|
||||||
|
<a name="navbar.bottom.firstrow">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="navList" title="Navigation">
|
||||||
|
<li><a href="../org/mozilla/mentat/package-summary.html">Package</a></li>
|
||||||
|
<li>Class</li>
|
||||||
|
<li><a href="../overview-tree.html">Tree</a></li>
|
||||||
|
<li><a href="../deprecated-list.html">Deprecated</a></li>
|
||||||
|
<li class="navBarCell1Rev">Index</li>
|
||||||
|
<li><a href="../help-doc.html">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="subNav">
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="index-8.html">Prev Letter</a></li>
|
||||||
|
<li><a href="index-10.html">Next Letter</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../index.html?index-files/index-9.html" target="_top">Frames</a></li>
|
||||||
|
<li><a href="index-9.html" target="_top">No Frames</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
|
<li><a href="../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||||
|
if(window==top) {
|
||||||
|
allClassesLink.style.display = "block";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allClassesLink.style.display = "none";
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<a name="skip.navbar.bottom">
|
||||||
|
<!-- -->
|
||||||
|
</a></div>
|
||||||
|
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -2,7 +2,7 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:14 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>Generated Documentation (Untitled)</title>
|
<title>Generated Documentation (Untitled)</title>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
tmpTargetPage = "" + window.location.search;
|
tmpTargetPage = "" + window.location.search;
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:14 BST 2018 -->
|
||||||
<title>CacheDirection</title>
|
<title>CacheDirection</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../../../org/mozilla/mentat/AttributeList.ByValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Prev Class</span></a></li>
|
<li>Prev Class</li>
|
||||||
<li><a href="../../../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Next Class</span></a></li>
|
<li><a href="../../../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Next Class</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
|
@ -304,7 +304,7 @@ not permitted.)</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="subNav">
|
<div class="subNav">
|
||||||
<ul class="navList">
|
<ul class="navList">
|
||||||
<li><a href="../../../org/mozilla/mentat/AttributeList.ByValue.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Prev Class</span></a></li>
|
<li>Prev Class</li>
|
||||||
<li><a href="../../../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Next Class</span></a></li>
|
<li><a href="../../../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Next Class</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="navList">
|
<ul class="navList">
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>ColResultIterator</title>
|
<title>ColResultIterator</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
catch(err) {
|
catch(err) {
|
||||||
}
|
}
|
||||||
//-->
|
//-->
|
||||||
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
|
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
|
||||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||||
var altColor = "altColor";
|
var altColor = "altColor";
|
||||||
var rowColor = "rowColor";
|
var rowColor = "rowColor";
|
||||||
|
@ -107,13 +107,12 @@ var activeTableTab = "activeTableTab";
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a></dd>
|
<dd><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><<a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a>></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
<pre>public class <span class="typeNameLabel">ColResultIterator</span>
|
<pre>public class <span class="typeNameLabel">ColResultIterator</span>
|
||||||
extends <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
|
extends <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
|
||||||
implements <a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a></pre>
|
|
||||||
<div class="block">Iterator for a <a href="../../../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><code>CollResult</code></a></div>
|
<div class="block">Iterator for a <a href="../../../org/mozilla/mentat/CollResult.html" title="class in org.mozilla.mentat"><code>CollResult</code></a></div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -134,23 +133,33 @@ implements <a href="https://developer.android.com/reference/java/util/Iterator.h
|
||||||
<th class="colLast" scope="col">Method and Description</th>
|
<th class="colLast" scope="col">Method and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i0" class="altColor">
|
<tr id="i0" class="altColor">
|
||||||
|
<td class="colFirst"><code>protected <a href="../../../org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat">JNA.TypedValue</a></code></td>
|
||||||
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#advanceIterator--">advanceIterator</a></span>()</code>
|
||||||
|
<div class="block">Implement by calling `JNA.INSTANCE.whatever_iter_next(this.validPointer());`</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="i1" class="rowColor">
|
||||||
<td class="colFirst"><code>void</code></td>
|
<td class="colFirst"><code>void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#close--">close</a></span>()</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#close--">close</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i1" class="rowColor">
|
|
||||||
<td class="colFirst"><code>com.sun.jna.Pointer</code></td>
|
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#getPointerForUUID-java.util.UUID-">getPointerForUUID</a></span>(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</code> </td>
|
|
||||||
</tr>
|
|
||||||
<tr id="i2" class="altColor">
|
<tr id="i2" class="altColor">
|
||||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a></code></td>
|
<td class="colFirst"><code>protected <a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a></code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#getUUIDFromPointer-com.sun.jna.Pointer-">getUUIDFromPointer</a></span>(com.sun.jna.Pointer uuidPtr)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#constructItem-org.mozilla.mentat.JNA.TypedValue-">constructItem</a></span>(<a href="../../../org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat">JNA.TypedValue</a> p)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i3" class="rowColor">
|
<tr id="i3" class="rowColor">
|
||||||
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#destroyPointer-org.mozilla.mentat.JNA.TypedValueListIter-">destroyPointer</a></span>(<a href="../../../org/mozilla/mentat/JNA.TypedValueListIter.html" title="class in org.mozilla.mentat">JNA.TypedValueListIter</a> p)</code> </td>
|
||||||
|
</tr>
|
||||||
|
<tr id="i4" class="altColor">
|
||||||
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#finalize--">finalize</a></span>()</code> </td>
|
||||||
|
</tr>
|
||||||
|
<tr id="i5" class="rowColor">
|
||||||
<td class="colFirst"><code>boolean</code></td>
|
<td class="colFirst"><code>boolean</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#hasNext--">hasNext</a></span>()</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#hasNext--">hasNext</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i4" class="altColor">
|
<tr id="i6" class="altColor">
|
||||||
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a></code></td>
|
<td class="colFirst"><code>E</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#next--">next</a></span>()</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/ColResultIterator.html#next--">next</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -159,7 +168,7 @@ implements <a href="https://developer.android.com/reference/java/util/Iterator.h
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.java.util.Iterator">
|
<li class="blockList"><a name="methods.inherited.from.class.java.util.Iterator">
|
||||||
|
@ -182,6 +191,34 @@ implements <a href="https://developer.android.com/reference/java/util/Iterator.h
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Method Detail</h3>
|
<h3>Method Detail</h3>
|
||||||
|
<a name="advanceIterator--">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>advanceIterator</h4>
|
||||||
|
<pre>protected <a href="../../../org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat">JNA.TypedValue</a> advanceIterator()</pre>
|
||||||
|
<div class="block">Implement by calling `JNA.INSTANCE.whatever_iter_next(this.validPointer());`</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<a name="constructItem-org.mozilla.mentat.JNA.TypedValue-">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>constructItem</h4>
|
||||||
|
<pre>protected <a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a> constructItem(<a href="../../../org/mozilla/mentat/JNA.TypedValue.html" title="class in org.mozilla.mentat">JNA.TypedValue</a> p)</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<a name="destroyPointer-org.mozilla.mentat.JNA.TypedValueListIter-">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>destroyPointer</h4>
|
||||||
|
<pre>protected void destroyPointer(<a href="../../../org/mozilla/mentat/JNA.TypedValueListIter.html" title="class in org.mozilla.mentat">JNA.TypedValueListIter</a> p)</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<a name="hasNext--">
|
<a name="hasNext--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
|
@ -191,7 +228,7 @@ implements <a href="https://developer.android.com/reference/java/util/Iterator.h
|
||||||
<pre>public boolean hasNext()</pre>
|
<pre>public boolean hasNext()</pre>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true#hasNext--" title="class or interface in java.util">hasNext</a></code> in interface <code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true#hasNext--" title="class or interface in java.util">hasNext</a></code> in interface <code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><E extends org.mozilla.mentat.RustObject<ItemPtr>></code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -201,10 +238,10 @@ implements <a href="https://developer.android.com/reference/java/util/Iterator.h
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>next</h4>
|
<h4>next</h4>
|
||||||
<pre>public <a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a> next()</pre>
|
<pre>public E next()</pre>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true#next--" title="class or interface in java.util">next</a></code> in interface <code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true#next--" title="class or interface in java.util">next</a></code> in interface <code><a href="https://developer.android.com/reference/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a><E extends org.mozilla.mentat.RustObject<ItemPtr>></code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -217,28 +254,21 @@ implements <a href="https://developer.android.com/reference/java/util/Iterator.h
|
||||||
<pre>public void close()</pre>
|
<pre>public void close()</pre>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
|
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="getPointerForUUID-java.util.UUID-">
|
<a name="finalize--">
|
||||||
<!-- -->
|
|
||||||
</a>
|
|
||||||
<ul class="blockList">
|
|
||||||
<li class="blockList">
|
|
||||||
<h4>getPointerForUUID</h4>
|
|
||||||
<pre>public com.sun.jna.Pointer getPointerForUUID(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</pre>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a name="getUUIDFromPointer-com.sun.jna.Pointer-">
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>getUUIDFromPointer</h4>
|
<h4>finalize</h4>
|
||||||
<pre>public <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> getUUIDFromPointer(com.sun.jna.Pointer uuidPtr)</pre>
|
<pre>protected void finalize()</pre>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
||||||
|
<dd><code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a></code> in class <code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:14 BST 2018 -->
|
||||||
<title>CollResult</title>
|
<title>CollResult</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
catch(err) {
|
catch(err) {
|
||||||
}
|
}
|
||||||
//-->
|
//-->
|
||||||
var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
|
var methods = {"i0":10,"i1":10,"i2":10};
|
||||||
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
|
||||||
var altColor = "altColor";
|
var altColor = "altColor";
|
||||||
var rowColor = "rowColor";
|
var rowColor = "rowColor";
|
||||||
|
@ -112,7 +112,7 @@ var activeTableTab = "activeTableTab";
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="https://developer.android.com/reference/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a><<a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a>></dd>
|
<dd><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a>, <a href="https://developer.android.com/reference/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a><<a href="../../../org/mozilla/mentat/TypedValue.html" title="class in org.mozilla.mentat">TypedValue</a>></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
|
@ -155,7 +155,7 @@ implements <a href="https://developer.android.com/reference/java/lang/Iterable.h
|
||||||
<th class="colOne" scope="col">Constructor and Description</th>
|
<th class="colOne" scope="col">Constructor and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="altColor">
|
<tr class="altColor">
|
||||||
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#CollResult-com.sun.jna.Pointer-">CollResult</a></span>(com.sun.jna.Pointer pointer)</code> </td>
|
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#CollResult-org.mozilla.mentat.JNA.TypedValueList-">CollResult</a></span>(<a href="../../../org/mozilla/mentat/JNA.TypedValueList.html" title="class in org.mozilla.mentat">JNA.TypedValueList</a> pointer)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
@ -177,14 +177,10 @@ implements <a href="https://developer.android.com/reference/java/lang/Iterable.h
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#close--">close</a></span>()</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#close--">close</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i1" class="rowColor">
|
<tr id="i1" class="rowColor">
|
||||||
<td class="colFirst"><code>com.sun.jna.Pointer</code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#getPointerForUUID-java.util.UUID-">getPointerForUUID</a></span>(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#finalize--">finalize</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i2" class="altColor">
|
<tr id="i2" class="altColor">
|
||||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a></code></td>
|
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#getUUIDFromPointer-com.sun.jna.Pointer-">getUUIDFromPointer</a></span>(com.sun.jna.Pointer uuidPtr)</code> </td>
|
|
||||||
</tr>
|
|
||||||
<tr id="i3" class="rowColor">
|
|
||||||
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></code></td>
|
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/ColResultIterator.html" title="class in org.mozilla.mentat">ColResultIterator</a></code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#iterator--">iterator</a></span>()</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/CollResult.html#iterator--">iterator</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -194,14 +190,14 @@ implements <a href="https://developer.android.com/reference/java/lang/Iterable.h
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></h3>
|
<h3>Methods inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></h3>
|
||||||
<code><a href="../../../org/mozilla/mentat/TupleResult.html#asBool-java.lang.Integer-">asBool</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asDate-java.lang.Integer-">asDate</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asDouble-java.lang.Integer-">asDouble</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asEntid-java.lang.Integer-">asEntid</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asKeyword-java.lang.Integer-">asKeyword</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asLong-java.lang.Integer-">asLong</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asString-java.lang.Integer-">asString</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asUUID-java.lang.Integer-">asUUID</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#get-java.lang.Integer-">get</a></code></li>
|
<code><a href="../../../org/mozilla/mentat/TupleResult.html#asBool-java.lang.Integer-">asBool</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asDate-java.lang.Integer-">asDate</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asDouble-java.lang.Integer-">asDouble</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asEntid-java.lang.Integer-">asEntid</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asKeyword-java.lang.Integer-">asKeyword</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asLong-java.lang.Integer-">asLong</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asString-java.lang.Integer-">asString</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#asUUID-java.lang.Integer-">asUUID</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#destroyPointer-org.mozilla.mentat.JNA.TypedValueList-">destroyPointer</a>, <a href="../../../org/mozilla/mentat/TupleResult.html#get-java.lang.Integer-">get</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
|
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Iterable">
|
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Iterable">
|
||||||
|
@ -224,13 +220,13 @@ implements <a href="https://developer.android.com/reference/java/lang/Iterable.h
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Constructor Detail</h3>
|
<h3>Constructor Detail</h3>
|
||||||
<a name="CollResult-com.sun.jna.Pointer-">
|
<a name="CollResult-org.mozilla.mentat.JNA.TypedValueList-">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>CollResult</h4>
|
<h4>CollResult</h4>
|
||||||
<pre>public CollResult(com.sun.jna.Pointer pointer)</pre>
|
<pre>public CollResult(<a href="../../../org/mozilla/mentat/JNA.TypedValueList.html" title="class in org.mozilla.mentat">JNA.TypedValueList</a> pointer)</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -241,23 +237,6 @@ implements <a href="https://developer.android.com/reference/java/lang/Iterable.h
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Method Detail</h3>
|
<h3>Method Detail</h3>
|
||||||
<a name="close--">
|
|
||||||
<!-- -->
|
|
||||||
</a>
|
|
||||||
<ul class="blockList">
|
|
||||||
<li class="blockList">
|
|
||||||
<h4>close</h4>
|
|
||||||
<pre>public void close()</pre>
|
|
||||||
<dl>
|
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
|
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
|
||||||
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
|
||||||
<dd><code><a href="../../../org/mozilla/mentat/TupleResult.html#close--">close</a></code> in class <code><a href="../../../org/mozilla/mentat/TupleResult.html" title="class in org.mozilla.mentat">TupleResult</a></code></dd>
|
|
||||||
</dl>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a name="iterator--">
|
<a name="iterator--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
|
@ -271,22 +250,30 @@ implements <a href="https://developer.android.com/reference/java/lang/Iterable.h
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="getPointerForUUID-java.util.UUID-">
|
<a name="close--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>getPointerForUUID</h4>
|
<h4>close</h4>
|
||||||
<pre>public com.sun.jna.Pointer getPointerForUUID(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</pre>
|
<pre>public void close()</pre>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
|
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="getUUIDFromPointer-com.sun.jna.Pointer-">
|
<a name="finalize--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>getUUIDFromPointer</h4>
|
<h4>finalize</h4>
|
||||||
<pre>public <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> getUUIDFromPointer(com.sun.jna.Pointer uuidPtr)</pre>
|
<pre>protected void finalize()</pre>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
||||||
|
<dd><code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a></code> in class <code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:14 BST 2018 -->
|
||||||
<title>CollResultHandler</title>
|
<title>CollResultHandler</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>EntityBuilder</title>
|
<title>EntityBuilder</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
<dd><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
|
@ -165,7 +165,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<th class="colOne" scope="col">Constructor and Description</th>
|
<th class="colOne" scope="col">Constructor and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="altColor">
|
<tr class="altColor">
|
||||||
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/EntityBuilder.html#EntityBuilder-com.sun.jna.Pointer-">EntityBuilder</a></span>(com.sun.jna.Pointer pointer)</code> </td>
|
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/EntityBuilder.html#EntityBuilder-org.mozilla.mentat.JNA.EntityBuilder-">EntityBuilder</a></span>(<a href="../../../org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat">JNA.EntityBuilder</a> pointer)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
@ -249,12 +249,12 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i10" class="altColor">
|
<tr id="i10" class="altColor">
|
||||||
<td class="colFirst"><code>com.sun.jna.Pointer</code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/EntityBuilder.html#getPointerForUUID-java.util.UUID-">getPointerForUUID</a></span>(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/EntityBuilder.html#destroyPointer-org.mozilla.mentat.JNA.EntityBuilder-">destroyPointer</a></span>(<a href="../../../org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat">JNA.EntityBuilder</a> p)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i11" class="rowColor">
|
<tr id="i11" class="rowColor">
|
||||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a></code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/EntityBuilder.html#getUUIDFromPointer-com.sun.jna.Pointer-">getUUIDFromPointer</a></span>(com.sun.jna.Pointer uuidPtr)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/EntityBuilder.html#finalize--">finalize</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i12" class="altColor">
|
<tr id="i12" class="altColor">
|
||||||
<td class="colFirst"><code>void</code></td>
|
<td class="colFirst"><code>void</code></td>
|
||||||
|
@ -324,7 +324,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -340,13 +340,13 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Constructor Detail</h3>
|
<h3>Constructor Detail</h3>
|
||||||
<a name="EntityBuilder-com.sun.jna.Pointer-">
|
<a name="EntityBuilder-org.mozilla.mentat.JNA.EntityBuilder-">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>EntityBuilder</h4>
|
<h4>EntityBuilder</h4>
|
||||||
<pre>public EntityBuilder(com.sun.jna.Pointer pointer)</pre>
|
<pre>public EntityBuilder(<a href="../../../org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat">JNA.EntityBuilder</a> pointer)</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -680,36 +680,39 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<a name="destroyPointer-org.mozilla.mentat.JNA.EntityBuilder-">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>destroyPointer</h4>
|
||||||
|
<pre>protected void destroyPointer(<a href="../../../org/mozilla/mentat/JNA.EntityBuilder.html" title="class in org.mozilla.mentat">JNA.EntityBuilder</a> p)</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<a name="close--">
|
<a name="close--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>close</h4>
|
<h4>close</h4>
|
||||||
<pre>public void close()
|
<pre>public void close()</pre>
|
||||||
throws <a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="throwsLabel">Throws:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="getPointerForUUID-java.util.UUID-">
|
<a name="finalize--">
|
||||||
<!-- -->
|
|
||||||
</a>
|
|
||||||
<ul class="blockList">
|
|
||||||
<li class="blockList">
|
|
||||||
<h4>getPointerForUUID</h4>
|
|
||||||
<pre>public com.sun.jna.Pointer getPointerForUUID(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</pre>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a name="getUUIDFromPointer-com.sun.jna.Pointer-">
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>getUUIDFromPointer</h4>
|
<h4>finalize</h4>
|
||||||
<pre>public <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> getUUIDFromPointer(com.sun.jna.Pointer uuidPtr)</pre>
|
<pre>protected void finalize()</pre>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
||||||
|
<dd><code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a></code> in class <code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>InProgress</title>
|
<title>InProgress</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
<dd><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
|
@ -190,7 +190,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<th class="colOne" scope="col">Constructor and Description</th>
|
<th class="colOne" scope="col">Constructor and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="altColor">
|
<tr class="altColor">
|
||||||
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgress.html#InProgress-com.sun.jna.Pointer-">InProgress</a></span>(com.sun.jna.Pointer pointer)</code> </td>
|
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgress.html#InProgress-org.mozilla.mentat.JNA.InProgress-">InProgress</a></span>(<a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a> pointer)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
@ -237,12 +237,12 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i5" class="rowColor">
|
<tr id="i5" class="rowColor">
|
||||||
<td class="colFirst"><code>com.sun.jna.Pointer</code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgress.html#getPointerForUUID-java.util.UUID-">getPointerForUUID</a></span>(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgress.html#destroyPointer-org.mozilla.mentat.JNA.InProgress-">destroyPointer</a></span>(<a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a> p)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i6" class="altColor">
|
<tr id="i6" class="altColor">
|
||||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a></code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgress.html#getUUIDFromPointer-com.sun.jna.Pointer-">getUUIDFromPointer</a></span>(com.sun.jna.Pointer uuidPtr)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgress.html#finalize--">finalize</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i7" class="rowColor">
|
<tr id="i7" class="rowColor">
|
||||||
<td class="colFirst"><code>void</code></td>
|
<td class="colFirst"><code>void</code></td>
|
||||||
|
@ -265,7 +265,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -281,13 +281,13 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Constructor Detail</h3>
|
<h3>Constructor Detail</h3>
|
||||||
<a name="InProgress-com.sun.jna.Pointer-">
|
<a name="InProgress-org.mozilla.mentat.JNA.InProgress-">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>InProgress</h4>
|
<h4>InProgress</h4>
|
||||||
<pre>public InProgress(com.sun.jna.Pointer pointer)</pre>
|
<pre>public InProgress(<a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a> pointer)</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -391,36 +391,39 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
TODO throw exception if error occurs</div>
|
TODO throw exception if error occurs</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<a name="destroyPointer-org.mozilla.mentat.JNA.InProgress-">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>destroyPointer</h4>
|
||||||
|
<pre>protected void destroyPointer(<a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a> p)</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<a name="close--">
|
<a name="close--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>close</h4>
|
<h4>close</h4>
|
||||||
<pre>public void close()
|
<pre>public void close()</pre>
|
||||||
throws <a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="throwsLabel">Throws:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="getPointerForUUID-java.util.UUID-">
|
<a name="finalize--">
|
||||||
<!-- -->
|
|
||||||
</a>
|
|
||||||
<ul class="blockList">
|
|
||||||
<li class="blockList">
|
|
||||||
<h4>getPointerForUUID</h4>
|
|
||||||
<pre>public com.sun.jna.Pointer getPointerForUUID(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</pre>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a name="getUUIDFromPointer-com.sun.jna.Pointer-">
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>getUUIDFromPointer</h4>
|
<h4>finalize</h4>
|
||||||
<pre>public <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> getUUIDFromPointer(com.sun.jna.Pointer uuidPtr)</pre>
|
<pre>protected void finalize()</pre>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
||||||
|
<dd><code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a></code> in class <code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>InProgressBuilder</title>
|
<title>InProgressBuilder</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
<dd><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
|
@ -167,7 +167,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<th class="colOne" scope="col">Constructor and Description</th>
|
<th class="colOne" scope="col">Constructor and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="altColor">
|
<tr class="altColor">
|
||||||
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressBuilder.html#InProgressBuilder-com.sun.jna.Pointer-">InProgressBuilder</a></span>(com.sun.jna.Pointer pointer)</code> </td>
|
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressBuilder.html#InProgressBuilder-org.mozilla.mentat.JNA.InProgressBuilder-">InProgressBuilder</a></span>(<a href="../../../org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat">JNA.InProgressBuilder</a> pointer)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</li>
|
</li>
|
||||||
|
@ -259,12 +259,12 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i10" class="altColor">
|
<tr id="i10" class="altColor">
|
||||||
<td class="colFirst"><code>com.sun.jna.Pointer</code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressBuilder.html#getPointerForUUID-java.util.UUID-">getPointerForUUID</a></span>(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressBuilder.html#destroyPointer-org.mozilla.mentat.JNA.InProgressBuilder-">destroyPointer</a></span>(<a href="../../../org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat">JNA.InProgressBuilder</a> p)</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i11" class="rowColor">
|
<tr id="i11" class="rowColor">
|
||||||
<td class="colFirst"><code><a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a></code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressBuilder.html#getUUIDFromPointer-com.sun.jna.Pointer-">getUUIDFromPointer</a></span>(com.sun.jna.Pointer uuidPtr)</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressBuilder.html#finalize--">finalize</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i12" class="altColor">
|
<tr id="i12" class="altColor">
|
||||||
<td class="colFirst"><code>void</code></td>
|
<td class="colFirst"><code>void</code></td>
|
||||||
|
@ -342,7 +342,7 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -358,13 +358,13 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Constructor Detail</h3>
|
<h3>Constructor Detail</h3>
|
||||||
<a name="InProgressBuilder-com.sun.jna.Pointer-">
|
<a name="InProgressBuilder-org.mozilla.mentat.JNA.InProgressBuilder-">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>InProgressBuilder</h4>
|
<h4>InProgressBuilder</h4>
|
||||||
<pre>public InProgressBuilder(com.sun.jna.Pointer pointer)</pre>
|
<pre>public InProgressBuilder(<a href="../../../org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat">JNA.InProgressBuilder</a> pointer)</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -732,36 +732,39 @@ extends <a href="https://developer.android.com/reference/java/lang/Object.html?i
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<a name="destroyPointer-org.mozilla.mentat.JNA.InProgressBuilder-">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>destroyPointer</h4>
|
||||||
|
<pre>protected void destroyPointer(<a href="../../../org/mozilla/mentat/JNA.InProgressBuilder.html" title="class in org.mozilla.mentat">JNA.InProgressBuilder</a> p)</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<a name="close--">
|
<a name="close--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>close</h4>
|
<h4>close</h4>
|
||||||
<pre>public void close()
|
<pre>public void close()</pre>
|
||||||
throws <a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="throwsLabel">Throws:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="getPointerForUUID-java.util.UUID-">
|
<a name="finalize--">
|
||||||
<!-- -->
|
|
||||||
</a>
|
|
||||||
<ul class="blockList">
|
|
||||||
<li class="blockList">
|
|
||||||
<h4>getPointerForUUID</h4>
|
|
||||||
<pre>public com.sun.jna.Pointer getPointerForUUID(<a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> uuid)</pre>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<a name="getUUIDFromPointer-com.sun.jna.Pointer-">
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>getUUIDFromPointer</h4>
|
<h4>finalize</h4>
|
||||||
<pre>public <a href="https://developer.android.com/reference/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> getUUIDFromPointer(com.sun.jna.Pointer uuidPtr)</pre>
|
<pre>protected void finalize()</pre>
|
||||||
|
<dl>
|
||||||
|
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
||||||
|
<dd><code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a></code> in class <code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
|
||||||
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>InProgressTransactionResult.ByReference</title>
|
<title>InProgressTransactionResult.ByReference</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd>com.sun.jna.Structure.ByReference, <a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
<dd>com.sun.jna.Structure.ByReference</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>Enclosing class:</dt>
|
<dt>Enclosing class:</dt>
|
||||||
|
@ -161,7 +161,7 @@ implements com.sun.jna.Structure.ByReference</pre>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Fields inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
<h3>Fields inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
||||||
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#result">result</a></code></li>
|
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#error">error</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#txReport">txReport</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="fields.inherited.from.class.com.sun.jna.Structure">
|
<li class="blockList"><a name="fields.inherited.from.class.com.sun.jna.Structure">
|
||||||
|
@ -200,7 +200,7 @@ implements com.sun.jna.Structure.ByReference</pre>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
<h3>Methods inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
||||||
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#close--">close</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getFieldOrder--">getFieldOrder</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getInProgress--">getInProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getReport--">getReport</a></code></li>
|
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#finalize--">finalize</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getFieldOrder--">getFieldOrder</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getInProgress--">getInProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getReport--">getReport</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.com.sun.jna.Structure">
|
<li class="blockList"><a name="methods.inherited.from.class.com.sun.jna.Structure">
|
||||||
|
@ -214,7 +214,7 @@ implements com.sun.jna.Structure.ByReference</pre>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>InProgressTransactionResult.ByValue</title>
|
<title>InProgressTransactionResult.ByValue</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
<dt>All Implemented Interfaces:</dt>
|
||||||
<dd>com.sun.jna.Structure.ByValue, <a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
<dd>com.sun.jna.Structure.ByValue</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>Enclosing class:</dt>
|
<dt>Enclosing class:</dt>
|
||||||
|
@ -161,7 +161,7 @@ implements com.sun.jna.Structure.ByValue</pre>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Fields inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
<h3>Fields inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
||||||
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#result">result</a></code></li>
|
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#error">error</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#txReport">txReport</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="fields.inherited.from.class.com.sun.jna.Structure">
|
<li class="blockList"><a name="fields.inherited.from.class.com.sun.jna.Structure">
|
||||||
|
@ -200,7 +200,7 @@ implements com.sun.jna.Structure.ByValue</pre>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
<h3>Methods inherited from class org.mozilla.mentat.<a href="../../../org/mozilla/mentat/InProgressTransactionResult.html" title="class in org.mozilla.mentat">InProgressTransactionResult</a></h3>
|
||||||
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#close--">close</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getFieldOrder--">getFieldOrder</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getInProgress--">getInProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getReport--">getReport</a></code></li>
|
<code><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#finalize--">finalize</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getFieldOrder--">getFieldOrder</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getInProgress--">getInProgress</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#getReport--">getReport</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList"><a name="methods.inherited.from.class.com.sun.jna.Structure">
|
<li class="blockList"><a name="methods.inherited.from.class.com.sun.jna.Structure">
|
||||||
|
@ -214,7 +214,7 @@ implements com.sun.jna.Structure.ByValue</pre>
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
|
@ -2,9 +2,9 @@
|
||||||
<!-- NewPage -->
|
<!-- NewPage -->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 21 13:35:13 BST 2018 -->
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
<title>InProgressTransactionResult</title>
|
<title>InProgressTransactionResult</title>
|
||||||
<meta name="date" content="2018-06-21">
|
<meta name="date" content="2018-06-28">
|
||||||
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
<script type="text/javascript" src="../../../script.js"></script>
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
@ -111,18 +111,13 @@ var activeTableTab = "activeTableTab";
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<dl>
|
<dl>
|
||||||
<dt>All Implemented Interfaces:</dt>
|
|
||||||
<dd><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></dd>
|
|
||||||
</dl>
|
|
||||||
<dl>
|
|
||||||
<dt>Direct Known Subclasses:</dt>
|
<dt>Direct Known Subclasses:</dt>
|
||||||
<dd><a href="../../../org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByReference</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByValue</a></dd>
|
<dd><a href="../../../org/mozilla/mentat/InProgressTransactionResult.ByReference.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByReference</a>, <a href="../../../org/mozilla/mentat/InProgressTransactionResult.ByValue.html" title="class in org.mozilla.mentat">InProgressTransactionResult.ByValue</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<hr>
|
<hr>
|
||||||
<br>
|
<br>
|
||||||
<pre>public class <span class="typeNameLabel">InProgressTransactionResult</span>
|
<pre>public class <span class="typeNameLabel">InProgressTransactionResult</span>
|
||||||
extends com.sun.jna.Structure
|
extends com.sun.jna.Structure</pre>
|
||||||
implements <a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -172,12 +167,16 @@ implements <a href="https://developer.android.com/reference/java/io/Closeable.ht
|
||||||
<th class="colLast" scope="col">Field and Description</th>
|
<th class="colLast" scope="col">Field and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="altColor">
|
<tr class="altColor">
|
||||||
<td class="colFirst"><code>com.sun.jna.Pointer</code></td>
|
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a></code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a></span></code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#error">error</a></span></code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="rowColor">
|
<tr class="rowColor">
|
||||||
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/RustResult.ByReference.html" title="class in org.mozilla.mentat">RustResult.ByReference</a></code></td>
|
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a></code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#result">result</a></span></code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#inProgress">inProgress</a></span></code> </td>
|
||||||
|
</tr>
|
||||||
|
<tr class="altColor">
|
||||||
|
<td class="colFirst"><code><a href="../../../org/mozilla/mentat/JNA.TxReport.html" title="class in org.mozilla.mentat">JNA.TxReport</a></code></td>
|
||||||
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#txReport">txReport</a></span></code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
|
@ -219,8 +218,8 @@ implements <a href="https://developer.android.com/reference/java/io/Closeable.ht
|
||||||
<th class="colLast" scope="col">Method and Description</th>
|
<th class="colLast" scope="col">Method and Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i0" class="altColor">
|
<tr id="i0" class="altColor">
|
||||||
<td class="colFirst"><code>void</code></td>
|
<td class="colFirst"><code>protected void</code></td>
|
||||||
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#close--">close</a></span>()</code> </td>
|
<td class="colLast"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/InProgressTransactionResult.html#finalize--">finalize</a></span>()</code> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="i1" class="rowColor">
|
<tr id="i1" class="rowColor">
|
||||||
<td class="colFirst"><code>protected <a href="https://developer.android.com/reference/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://developer.android.com/reference/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>></code></td>
|
<td class="colFirst"><code>protected <a href="https://developer.android.com/reference/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://developer.android.com/reference/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>></code></td>
|
||||||
|
@ -249,7 +248,7 @@ implements <a href="https://developer.android.com/reference/java/io/Closeable.ht
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -271,16 +270,25 @@ implements <a href="https://developer.android.com/reference/java/io/Closeable.ht
|
||||||
<ul class="blockList">
|
<ul class="blockList">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>inProgress</h4>
|
<h4>inProgress</h4>
|
||||||
<pre>public com.sun.jna.Pointer inProgress</pre>
|
<pre>public <a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat">JNA.InProgress</a> inProgress</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="result">
|
<a name="txReport">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>txReport</h4>
|
||||||
|
<pre>public <a href="../../../org/mozilla/mentat/JNA.TxReport.html" title="class in org.mozilla.mentat">JNA.TxReport</a> txReport</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<a name="error">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>result</h4>
|
<h4>error</h4>
|
||||||
<pre>public <a href="../../../org/mozilla/mentat/RustResult.ByReference.html" title="class in org.mozilla.mentat">RustResult.ByReference</a> result</pre>
|
<pre>public <a href="../../../org/mozilla/mentat/RustError.html" title="class in org.mozilla.mentat">RustError</a> error</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -363,21 +371,16 @@ implements <a href="https://developer.android.com/reference/java/io/Closeable.ht
|
||||||
<pre>public <a href="../../../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat">TxReport</a> getReport()</pre>
|
<pre>public <a href="../../../org/mozilla/mentat/TxReport.html" title="class in org.mozilla.mentat">TxReport</a> getReport()</pre>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a name="close--">
|
<a name="finalize--">
|
||||||
<!-- -->
|
<!-- -->
|
||||||
</a>
|
</a>
|
||||||
<ul class="blockListLast">
|
<ul class="blockListLast">
|
||||||
<li class="blockList">
|
<li class="blockList">
|
||||||
<h4>close</h4>
|
<h4>finalize</h4>
|
||||||
<pre>public void close()
|
<pre>protected void finalize()</pre>
|
||||||
throws <a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
|
|
||||||
<dl>
|
<dl>
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
|
<dd><code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a></code> in class <code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
|
||||||
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
|
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true#close--" title="class or interface in java.lang">close</a></code> in interface <code><a href="https://developer.android.com/reference/java/lang/AutoCloseable.html?is-external=true" title="class or interface in java.lang">AutoCloseable</a></code></dd>
|
|
||||||
<dt><span class="throwsLabel">Throws:</span></dt>
|
|
||||||
<dd><code><a href="https://developer.android.com/reference/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
|
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
253
docs/apis/0.7/java/org/mozilla/mentat/JNA.EntityBuilder.html
Normal file
253
docs/apis/0.7/java/org/mozilla/mentat/JNA.EntityBuilder.html
Normal file
|
@ -0,0 +1,253 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
|
<!-- NewPage -->
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<!-- Generated by javadoc (1.8.0_152-release) on Thu Jun 28 11:01:15 BST 2018 -->
|
||||||
|
<title>JNA.EntityBuilder</title>
|
||||||
|
<meta name="date" content="2018-06-28">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
|
||||||
|
<script type="text/javascript" src="../../../script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
try {
|
||||||
|
if (location.href.indexOf('is-external=true') == -1) {
|
||||||
|
parent.document.title="JNA.EntityBuilder";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<noscript>
|
||||||
|
<div>JavaScript is disabled on your browser.</div>
|
||||||
|
</noscript>
|
||||||
|
<!-- ========= START OF TOP NAVBAR ======= -->
|
||||||
|
<div class="topNav"><a name="navbar.top">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
|
||||||
|
<a name="navbar.top.firstrow">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="navList" title="Navigation">
|
||||||
|
<li><a href="../../../org/mozilla/mentat/package-summary.html">Package</a></li>
|
||||||
|
<li class="navBarCell1Rev">Class</li>
|
||||||
|
<li><a href="package-tree.html">Tree</a></li>
|
||||||
|
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
|
||||||
|
<li><a href="../../../index-files/index-1.html">Index</a></li>
|
||||||
|
<li><a href="../../../help-doc.html">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="subNav">
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../../../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">Prev Class</span></a></li>
|
||||||
|
<li><a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Next Class</span></a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../../../index.html?org/mozilla/mentat/JNA.EntityBuilder.html" target="_top">Frames</a></li>
|
||||||
|
<li><a href="JNA.EntityBuilder.html" target="_top">No Frames</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList" id="allclasses_navbar_top">
|
||||||
|
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
allClassesLink = document.getElementById("allclasses_navbar_top");
|
||||||
|
if(window==top) {
|
||||||
|
allClassesLink.style.display = "block";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allClassesLink.style.display = "none";
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<ul class="subNavList">
|
||||||
|
<li>Summary: </li>
|
||||||
|
<li>Nested | </li>
|
||||||
|
<li>Field | </li>
|
||||||
|
<li><a href="#constructor.summary">Constr</a> | </li>
|
||||||
|
<li><a href="#methods.inherited.from.class.com.sun.jna.PointerType">Method</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="subNavList">
|
||||||
|
<li>Detail: </li>
|
||||||
|
<li>Field | </li>
|
||||||
|
<li><a href="#constructor.detail">Constr</a> | </li>
|
||||||
|
<li>Method</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<a name="skip.navbar.top">
|
||||||
|
<!-- -->
|
||||||
|
</a></div>
|
||||||
|
<!-- ========= END OF TOP NAVBAR ========= -->
|
||||||
|
<!-- ======== START OF CLASS DATA ======== -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="subTitle">org.mozilla.mentat</div>
|
||||||
|
<h2 title="Class JNA.EntityBuilder" class="title">Class JNA.EntityBuilder</h2>
|
||||||
|
</div>
|
||||||
|
<div class="contentContainer">
|
||||||
|
<ul class="inheritance">
|
||||||
|
<li><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
|
||||||
|
<li>
|
||||||
|
<ul class="inheritance">
|
||||||
|
<li>com.sun.jna.PointerType</li>
|
||||||
|
<li>
|
||||||
|
<ul class="inheritance">
|
||||||
|
<li>org.mozilla.mentat.JNA.EntityBuilder</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="description">
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<dl>
|
||||||
|
<dt>All Implemented Interfaces:</dt>
|
||||||
|
<dd>com.sun.jna.NativeMapped</dd>
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>Enclosing interface:</dt>
|
||||||
|
<dd><a href="../../../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat">JNA</a></dd>
|
||||||
|
</dl>
|
||||||
|
<hr>
|
||||||
|
<br>
|
||||||
|
<pre>public static class <span class="typeNameLabel">JNA.EntityBuilder</span>
|
||||||
|
extends com.sun.jna.PointerType</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="summary">
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList"><a name="constructor.summary">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h3>Constructor Summary</h3>
|
||||||
|
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
|
||||||
|
<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
|
||||||
|
<tr>
|
||||||
|
<th class="colOne" scope="col">Constructor and Description</th>
|
||||||
|
</tr>
|
||||||
|
<tr class="altColor">
|
||||||
|
<td class="colOne"><code><span class="memberNameLink"><a href="../../../org/mozilla/mentat/JNA.EntityBuilder.html#EntityBuilder--">EntityBuilder</a></span>()</code> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<!-- ========== METHOD SUMMARY =========== -->
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList"><a name="method.summary">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h3>Method Summary</h3>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList"><a name="methods.inherited.from.class.com.sun.jna.PointerType">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h3>Methods inherited from class com.sun.jna.PointerType</h3>
|
||||||
|
<code>equals, fromNative, getPointer, hashCode, nativeType, setPointer, toNative, toString</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h3>Methods inherited from class java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
|
||||||
|
<code><a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="details">
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList">
|
||||||
|
<!-- ========= CONSTRUCTOR DETAIL ======== -->
|
||||||
|
<ul class="blockList">
|
||||||
|
<li class="blockList"><a name="constructor.detail">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<h3>Constructor Detail</h3>
|
||||||
|
<a name="EntityBuilder--">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="blockListLast">
|
||||||
|
<li class="blockList">
|
||||||
|
<h4>EntityBuilder</h4>
|
||||||
|
<pre>public EntityBuilder()</pre>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- ========= END OF CLASS DATA ========= -->
|
||||||
|
<!-- ======= START OF BOTTOM NAVBAR ====== -->
|
||||||
|
<div class="bottomNav"><a name="navbar.bottom">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
|
||||||
|
<a name="navbar.bottom.firstrow">
|
||||||
|
<!-- -->
|
||||||
|
</a>
|
||||||
|
<ul class="navList" title="Navigation">
|
||||||
|
<li><a href="../../../org/mozilla/mentat/package-summary.html">Package</a></li>
|
||||||
|
<li class="navBarCell1Rev">Class</li>
|
||||||
|
<li><a href="package-tree.html">Tree</a></li>
|
||||||
|
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
|
||||||
|
<li><a href="../../../index-files/index-1.html">Index</a></li>
|
||||||
|
<li><a href="../../../help-doc.html">Help</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="subNav">
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../../../org/mozilla/mentat/JNA.html" title="interface in org.mozilla.mentat"><span class="typeNameLink">Prev Class</span></a></li>
|
||||||
|
<li><a href="../../../org/mozilla/mentat/JNA.InProgress.html" title="class in org.mozilla.mentat"><span class="typeNameLink">Next Class</span></a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList">
|
||||||
|
<li><a href="../../../index.html?org/mozilla/mentat/JNA.EntityBuilder.html" target="_top">Frames</a></li>
|
||||||
|
<li><a href="JNA.EntityBuilder.html" target="_top">No Frames</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navList" id="allclasses_navbar_bottom">
|
||||||
|
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
|
||||||
|
</ul>
|
||||||
|
<div>
|
||||||
|
<script type="text/javascript"><!--
|
||||||
|
allClassesLink = document.getElementById("allclasses_navbar_bottom");
|
||||||
|
if(window==top) {
|
||||||
|
allClassesLink.style.display = "block";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
allClassesLink.style.display = "none";
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<ul class="subNavList">
|
||||||
|
<li>Summary: </li>
|
||||||
|
<li>Nested | </li>
|
||||||
|
<li>Field | </li>
|
||||||
|
<li><a href="#constructor.summary">Constr</a> | </li>
|
||||||
|
<li><a href="#methods.inherited.from.class.com.sun.jna.PointerType">Method</a></li>
|
||||||
|
</ul>
|
||||||
|
<ul class="subNavList">
|
||||||
|
<li>Detail: </li>
|
||||||
|
<li>Field | </li>
|
||||||
|
<li><a href="#constructor.detail">Constr</a> | </li>
|
||||||
|
<li>Method</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<a name="skip.navbar.bottom">
|
||||||
|
<!-- -->
|
||||||
|
</a></div>
|
||||||
|
<!-- ======== END OF BOTTOM NAVBAR ======= -->
|
||||||
|
</body>
|
||||||
|
</html>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue