View Source Needle.Virtual (needle v0.8.0)
Sets up an Ecto Schema for a Virtual Pointable
Virtual Pointables (or just virtuals
) are like pointables with no
additional columns, except instead of being backed by a table they
are backed by a view. This is more efficient of resources but only
works when there are no additional columns to add.
If you need to add columns to the schema, you should use a pointable.
Sample Usage
use Needle.Virtual,
otp_app: :my_app, # your OTP application's name
source: "my_table", # default name of view in database
table_id: "01EBTVSZJ6X02J01R1XWWPWGZW" # valid ULID to identify virtual
virtual_schema do
# ... `has_one`, `has_many`, or *virtual* fields ONLY go here.
end
Overriding with configuration
During use
(i.e. compilation time), we will attempt to load
configuration from the provided :otp_app
under the key of the
current module. Any values provided here will override the defaults
provided to use
. This allows you to configure them after the fact.
Additionally, pointables use Exto
's flex_schema()
, so you can
provide additional configuration for those in the same place. Unlike
a regular pointable, you should not add additional
(non-virtual) fields, but it is permitted to add has_one
/
has_many
associations.
I shall say it again because it's important: This happens at compile time. You must rebuild the app containing the pointable whenever the configuration changes.
Introspection
Defines a function __pointers__/1
to introspect data. Recognised
parameters:
:role
- :virtual
.
:table_id
- retrieves the ULID id of the virtual.
:otp_app
- retrieves the OTP application to which this belongs.