Prefix: code_.
What an author may write at each directive that names Java code: one arm per directive, each admitting the members that directive can take. A reader asking what may go in @scalarType(scalar:) reads the arm for it rather than filtering a census of every class.
Where to start
- code_scalar_constant
-
One constant an author may name in @scalarType(scalar:), and the Java type its scalar coerces to.
- code_throwable
-
One throwable on the classpath, which is what an author may name as an @error handler’s exception.
- code_condition_method
-
One method an author may name in @condition(condition:).
- code_external_field_method
-
One method an author may name in @externalField(reference:).
How this family meets the others
store_-
3 foreign keys from this family’s rows into that one.
graphitron_-
1 foreign key from that family’s rows into this one.
sql_-
1 foreign key from this family’s rows into that one.
Why the name is right
One gatherer per thing an author writes, which is what this family is for and what the classpath census it replaces was not. A census answers what the classpath holds, so its one scope rule has to serve every reader and serves none of them exactly; the arms here each carry their own corpus and their own admission rule. Five of them read the reactor, since what a consumer names at @service, @condition, @externalField, @enum and a reference’s condition is their own code; two read the whole classpath, the scalar constants and the throwables, because what an author names there belongs to a library. Arguments, return types and declared exceptions are not arms of their own: they are facts about a method, and a method has exactly one arm.
code_class
One class the reading read, and the file under the entry it was read out of. For example a consumer’s FilmService on the reactor’s own output, beside a jOOQ interface on a declared jar.
Primary key: (source_name, class_name). Foreign key: (source_name, file_path) references store_class_file (source_name, file_path).
source_name(CHARACTER VARYING, not null)-
the classpath entry the class was read from; the key’s leading dimension, and the reason one name declared by two entries is two classes. A graph reaches it through store_graph_source like any source-keyed fact
class_name(CHARACTER VARYING, not null)-
the fully-qualified binary name as the classfile spells it
file_path(CHARACTER VARYING, not null)-
the file it was read out of, under that entry. Not part of the key, a file being free to declare more than one class; the foreign key is what lets a file the next reading does not find take its classes, and their members, with it
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the entry it was read from
code_condition_method
One method an author may name in @condition(condition:). For example a public static filmTitleContains(Film, String) returning an org.jooq.Condition.
Primary key: (source_name, class_name, method_name, descriptor). Foreign key: (source_name, class_name, method_name, descriptor) references code_method (source_name, class_name, method_name, descriptor).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the declaring class, as on code_method
method_name(CHARACTER VARYING, not null)-
the method, as on code_method
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, completing the key. The whole row is the key, on code_service_method.descriptor’s terms; the return type this arm admits on is fixed by the admission and would repeat its own predicate on every row
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the method it hangs on
code_condition_method_parameter_table
The catalog table one TABLE_CONCRETE parameter position names. For example position 0 of filmTitleContains naming the film table of the consumer’s public schema.
Primary key: (source_name, class_name, method_name, descriptor, position). Foreign key: (source_name, class_name, method_name, descriptor, position) references code_method_parameter (source_name, class_name, method_name, descriptor, position). Foreign key: (table_source_name, table_schema, table_name) references sql_table (source_name, table_schema, table_name).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method_parameter; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the declaring class, as on code_method_parameter
method_name(CHARACTER VARYING, not null)-
the method, as on code_method_parameter
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, as on code_method_parameter
position(INTEGER, not null)-
the position, completing the key; with the four columns above, the parameter this resolution is of, and the row is deleted with it
table_source_name(CHARACTER VARYING, not null)-
the catalog partition holding the table, the first of three columns keying it
table_schema(CHARACTER VARYING, not null)-
the schema the table is in, the second of the three
table_name(CHARACTER VARYING, not null)-
the table’s SQL name, the third. Keyed to sql_table rather than carrying the generated class name, so a reader joins a primary key instead of sql_table.class_fqn, which is no key and can match more than one row
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the parameter it hangs on
code_construction
How a value of one class is made, for the classes a generator has to make one of. For example a FilmInput record, made by calling its canonical constructor with every component at once.
Primary key: (source_name, class_name). Foreign key: (source_name, class_name) references code_class (source_name, class_name). Check: "SHAPE" IN('POSITIONAL', 'SETTERS').
source_name(CHARACTER VARYING, not null)-
the entry the class was read from, as on code_class; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the class being made, keyed into code_class because how a value is made is a fact about a class: a parameter names a type, but what is eventually constructed is the class that type delivers, and it is that class a compile can change. So a class the next reading does not find takes its construction and its write slots with it
shape(CHARACTER VARYING, not null)-
POSITIONAL or SETTERS: whether the members go in through the constructor all at once or one at a time afterwards. A record is the first, everything else with a usable no-argument constructor is the second, and a jOOQ record is the second like any other, being made empty and then filled. Carried because two emitters fork on it and it is the decision rather than the evidence for it: reading it off the class’s declared form would put the rule in the readers
descriptor(CHARACTER VARYING, not null)-
the constructor to call. At POSITIONAL that is the canonical one, whose parameters are the components in header order; at SETTERS it is ()V. Named by descriptor rather than by presence because a class may declare several and only one of them is the one this shape means
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the class it hangs on
code_external_field_method
One method an author may name in @externalField(reference:). For example a public static titleUpper(Film) returning an org.jooq.Field.
Primary key: (source_name, class_name, method_name, descriptor). Foreign key: (source_name, class_name, method_name, descriptor) references code_method (source_name, class_name, method_name, descriptor).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the declaring class, as on code_method
method_name(CHARACTER VARYING, not null)-
the method, as on code_method
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, completing the key. The table the lifter lifts from was a column here and is code_method_parameter’s role at position 0: a parameter’s type is the parameter’s fact, and a reader asking which table a lifter takes asks the position rather than the arm
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the method it hangs on
code_method
One public method of a class the reactor built, which is the population every directive naming Java draws its candidates from. For example filmsByRating(DSLContext, String) on a consumer’s FilmService.
Primary key: (source_name, class_name, method_name, descriptor). Foreign key: (source_name, class_name) references code_class (source_name, class_name). Foreign key: (source_name, result_type) references code_type (source_name, type_name). Check: ("RESULT_DELIVERY" IN('DIRECT', 'WRAPPED', 'MANY'))
OR ("RESULT_DELIVERY" IS NULL). Check: ("RESULT_ELEMENT_CLASS" IS NULL) = ("RESULT_DELIVERY" IS NULL).
source_name(CHARACTER VARYING, not null)-
the classpath entry the declaring class was read from; the key’s leading dimension. With the class beside it this row hangs on code_class, so a class a compile removed takes its methods with it rather than leaving them until the whole entry goes
class_name(CHARACTER VARYING, not null)-
the declaring class’s binary name, the left part of what an author writes at a directive
method_name(CHARACTER VARYING, not null)-
the method’s own name, the right part of it. Not a key on its own: a name an author writes may denote several declarations, and the count of rows sharing one is what says so
descriptor(CHARACTER VARYING, not null)-
the JVM method descriptor, completing the key. What tells two overloads apart, which no rendering of the erased types can: two methods taking same-named types from different packages render alike
is_static(BOOLEAN, not null)-
whether the method is static. A property of the declaration rather than of any directive, though it is what @service reads to decide whether a holder is needed and what @condition folds on before admitting a set of overloads as one target
result_type(CHARACTER VARYING, not null)-
the type the method results in, by reference. Not a relation of its own beside the parameters, because a result is the one thing a method has exactly one of and it carries neither a name nor an ordinal to be bound at: a parameter binds a type to a named position, and a result is the type
result_erased_class(CHARACTER VARYING, nullable)-
the class the result type erases to, type arguments dropped: java.util.List for a List<Film> and the class itself where the type is one. NULL where it erases to no class, which a primitive, a void, an array and a type variable are alike in. Here rather than on a shared row because a parse is a fact about the position that wrote it: the dictionary that held it was keyed by the spelling, so it was shared by every class mentioning it and no per-class reading could decide its fate
result_element_class(CHARACTER VARYING, nullable)-
the class the result delivers once its containers are peeled off, which is the question its readers ask: which class backs the GraphQL type this method produces. NULL where the type resolves to no class at all
result_delivery(CHARACTER VARYING, nullable)-
how the result delivers that class, DIRECT where the type is one, WRAPPED inside an Optional and MANY inside a collection. What a field declared a list is checked against, a single-delivering method behind a list field being an author error. NULL with the element beside it
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept by the reading that replaces it
code_method_exception
One exception a method declares it throws. For example filmsByRating declaring java.io.IOException.
Primary key: (source_name, class_name, method_name, descriptor, exception_class). Foreign key: (source_name, class_name, method_name, descriptor) references code_method (source_name, class_name, method_name, descriptor).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the declaring class, as on code_method
method_name(CHARACTER VARYING, not null)-
the method, as on code_method
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, as on code_method; with the three columns above, the method this clause belongs to, and the row is deleted with it
exception_class(CHARACTER VARYING, not null)-
the exception by binary name, completing the key. A set and not a list: the clause is read to decide whether same-named declarations agree and whether a field’s @error channel covers them, and neither comparison is order-sensitive, so declaration order would be a column nothing reads and a second way for two equal clauses to differ. Deliberately no foreign key to code_throwable: the classes a throws clause names are usually the JDK’s, which no classpath entry ships, so a name here is ordinarily a name and nothing further
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the method it hangs on
code_method_parameter
One position in a method’s parameter list: the type bound there, the name it is bound under, and what the type alone says the position is for. For example position 0 of filmTitleContains, named film and playing the TABLE_CONCRETE role.
Primary key: (source_name, class_name, method_name, descriptor, position). Foreign key: (source_name, class_name, method_name, descriptor) references code_method (source_name, class_name, method_name, descriptor). Foreign key: (source_name, parameter_type) references code_type (source_name, type_name). Check: "ROLE" IN('DSL_CONTEXT', 'TABLE_CONCRETE', 'TABLE_ANY', 'OTHER'). Check: "EXTRACTION" IN('DIRECT', 'ENUM_VALUE_OF'). Check: ("DELIVERY" IN('DIRECT', 'WRAPPED', 'MANY'))
OR ("DELIVERY" IS NULL). Check: ("ELEMENT_CLASS" IS NULL) = ("DELIVERY" IS NULL).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the declaring class, as on code_method
method_name(CHARACTER VARYING, not null)-
the method, as on code_method
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, as on code_method; with the three columns above, the method this position belongs to, and the row is deleted with it
position(INTEGER, not null)-
the position in the parameter list, 0-based, completing the key. Position is the key and not the name, because a name is what a classfile may omit and a position is what it always carries
parameter_name(CHARACTER VARYING, nullable)-
the parameter’s name as the source declared it, or NULL where the class was compiled without -parameters and the classfile carries no MethodParameters attribute. What a GraphQL argument binds to and what an argMapping entry targets, so a run that finds it absent refuses the binding rather than guessing; a reader must not read NULL as an unnamed parameter
parameter_type(CHARACTER VARYING, not null)-
the type bound at this position, by reference. A parameter is a binding rather than a description: what the type is and what it resolves to are the type’s own facts and are stated once however many positions carry it, which over this module’s main sources is thirteen hundred positions over two hundred types
erased_class(CHARACTER VARYING, nullable)-
the class the parameter type erases to, on code_method.result_erased_class' terms; what a binding compares against when it asks whether an argument can be passed here
element_class(CHARACTER VARYING, nullable)-
the class the parameter delivers once its containers are peeled off, on code_method.result_element_class' terms
delivery(CHARACTER VARYING, nullable)-
how the parameter delivers that class, on code_method.result_delivery' terms; NULL with the element beside it
role(CHARACTER VARYING, not null)-
what the position is for as far as its type alone decides, in a closed vocabulary of four, and the four are exclusive because no type satisfies two of them. DSL_CONTEXT: the run’s own jOOQ context is passed here. TABLE_CONCRETE: the declaration names one generated table, and code_condition_method_parameter_table says which where the catalog holds it. TABLE_ANY: the declaration is org.jooq.Table itself, raw or wildcarded, or a type variable, so the position takes whatever table the site supplies. OTHER: everything else, whose role is the application’s to decide from the arguments and context keys in scope at the site. Decided here rather than by a reader because deciding it needs an assignability walk, which a reader either re-derives through a recursive closure or asks a loader for
extraction(CHARACTER VARYING, not null)-
how a value bound to this position is coerced into it, decided by the declared type alone: ENUM_VALUE_OF where that type is an enum and DIRECT otherwise. The standing rule rather than the last word, a parameter bound to a slot carrying @nodeId receiving that slot’s decoded key instead, which intent_condition_param_decode states as the exception to this. Decided by loading the class, which is what makes it answerable for both populations at once: an author’s own enum and a generated one a column binds to, the second living in the package this reading excludes and so reachable no other way
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the method it hangs on
code_read_slot
One member name a class offers an author, the method that reads it and what reading it yields. For example a Film record offering title through its title() accessor, or a FilmDto offering it through getTitle().
Primary key: (source_name, class_name, method_name, descriptor). Foreign key: (source_name, class_name) references code_class (source_name, class_name). Foreign key: (source_name, slot_type) references code_type (source_name, type_name). Check: "ORIGIN" IN('RECORD_COMPONENT', 'BEAN_ACCESSOR'). Check: ("DELIVERY" IN('DIRECT', 'WRAPPED', 'MANY'))
OR ("DELIVERY" IS NULL). Check: ("ELEMENT_CLASS" IS NULL) = ("DELIVERY" IS NULL).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the class offering the member, which is the class an author names and not always the class the accessor is written on. A member a base class declares is one the subclass offers, so this is where the walk found it rather than where it was declared. Keyed into code_class, so a class offering members is one the reading actually read rather than a name appearing here and nowhere else
method_name(CHARACTER VARYING, not null)-
the method that reads the member. The accessor is the key rather than the name an author writes, because the name is the part that is not unique: a class spelling one property getTitle and isTitle offers title twice
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, completing the key: two accessors of one name on one class are two slots, which is what overloading is
declaring_class(CHARACTER VARYING, not null)-
the class the accessor is written on, which is the class a jump to the member’s own source lands in. Equal to the offering class wherever the class declares its own member and different wherever it inherits one. No foreign key, for the reason the write side names the call it makes without keying to it: a base class may be read from a different classpath entry than the class offering its members, so the method’s own row sits under a key this one does not carry, and a constraint would refuse exactly the inheritance this column exists to record
slot_name(CHARACTER VARYING, not null)-
the name @field(name:) resolves against: a record component’s own name, or the property a getter offers, which is the remainder after get or is with its first letter lowered. Deliberately not unique within a class, two spellings of one property being two rows; a reader wanting one takes the first and a reader offering candidates offers both
slot_type(CHARACTER VARYING, not null)-
what reading the member yields, as code_type spells it. Carried rather than reached through the accessor’s own row, because what a member yields is a fact about the class offering it and not about the method behind it. The two agree wherever a class declares its own member. They part at inheritance: an inherited accessor has no row under the offering class, and its base may have been read from another entry or not read at all, so a slot typed only through one could not exist. And a base class declaring K getId() offers Integer to a subclass extending it at Integer, which only the offering class can say. The spelling is the accessor’s declared result today, type variables unsubstituted, so that case reads K here; this column is where the substituted type goes when the reading states it
erased_class(CHARACTER VARYING, nullable)-
the class what the member yields erases to, on code_method.result_erased_class' terms. Here rather than through the accessor for the reasons slot_type gives
element_class(CHARACTER VARYING, nullable)-
the class the member delivers once its containers are peeled off, on code_method.result_element_class' terms: which class backs the GraphQL type a field reading this member produces
delivery(CHARACTER VARYING, nullable)-
how the member delivers that class, on code_method.result_delivery' terms; NULL with the element beside it
origin(CHARACTER VARYING, not null)-
RECORD_COMPONENT or BEAN_ACCESSOR, which is a fact about the offering class rather than the member: a class takes exactly one arm, chosen by its declared form, so a record answers with its components and anything else with its getters. Carried because two readers turn on it, one choosing where a go-to-definition lands and one choosing the noun a diagnostic uses
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the accessor it hangs on
code_scalar_constant
One constant an author may name in @scalarType(scalar:), and the Java type its scalar coerces to. For example a DATE_TIME field coercing to java.time.OffsetDateTime.
Primary key: (source_name, class_name, field_name). Foreign key: (source_name, class_name) references code_class (source_name, class_name).
source_name(CHARACTER VARYING, not null)-
the classpath entry the owning class was read from, anchored by store_source; the key’s leading dimension, and what a reader joins through to scope by origin or by the graph’s own source set
class_name(CHARACTER VARYING, not null)-
the owning class’s binary name, the left part of the reference an author writes
field_name(CHARACTER VARYING, not null)-
the constant’s own name, the right part of that reference; completing the key
input_type(CHARACTER VARYING, nullable)-
the fully-qualified Java type a value of this constant’s scalar arrives as, the input parameter of the Coercing it holds, boxed where that is primitive. NULL where the constant does not resolve to one, which folds four cases this arm does not tell apart: the class does not load, the field is not a public static GraphQLScalarType, its initialiser throws, or the coercing declares no usable input. The one column here that a classfile cannot answer, read by loading the class instead, so absence is unresolved and never not-a-scalar
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; the reading ends by deleting the rows of the entries it read that still carry an older instant, which are the constants a recompiled entry no longer declares
code_service_method
One method an author may name in @service(service:). For example a public static filmsByRating(DSLContext, String) on a consumer’s FilmService.
Primary key: (source_name, class_name, method_name, descriptor). Foreign key: (source_name, class_name, method_name, descriptor) references code_method (source_name, class_name, method_name, descriptor).
source_name(CHARACTER VARYING, not null)-
the entry the declaring class was read from, as on code_method; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the declaring class, as on code_method
method_name(CHARACTER VARYING, not null)-
the method, as on code_method
descriptor(CHARACTER VARYING, not null)-
the method’s descriptor, completing the key. The whole row is the key: what the method returns and takes is code_method’s and does not vary by the directive that reached it, so membership is the only thing this relation has to say
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the method it hangs on
code_throwable
One throwable on the classpath, which is what an author may name as an @error handler’s exception. For example org.jooq.exception.IntegrityConstraintViolationException, read from the jOOQ jar.
Primary key: (source_name, class_name). Foreign key: (source_name) references store_source (source_name).
source_name(CHARACTER VARYING, not null)-
the classpath entry the class was read from, anchored by store_source; the key’s leading dimension, and what a reader joins through to rank a candidate by origin or by coordinate
class_name(CHARACTER VARYING, not null)-
the throwable’s binary name, which is what an author writes; completing the key
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; the reading ends by deleting the rows of the entries it read that still carry an older instant, which are the throwables a recompiled entry no longer declares
code_throwable_supertype
Every type a throwable is, itself excluded: the superclass chain above it and every interface it or they implement, transitively. For example IntegrityConstraintViolationException being a DataAccessException, a RuntimeException, an Exception, a Throwable and an Object.
Primary key: (source_name, class_name, supertype_name). Foreign key: (source_name, class_name) references code_throwable (source_name, class_name).
source_name(CHARACTER VARYING, not null)-
the entry the throwable was read from, as on code_throwable; the key’s leading dimension
class_name(CHARACTER VARYING, not null)-
the throwable this row is about, as on code_throwable; the row is deleted with it
supertype_name(CHARACTER VARYING, not null)-
one type the throwable is, by binary name, completing the key. java.lang.Throwable is a row on every throwable, being the admission fact itself, and java.lang.Object is a row for the same reason it is one on sql_table_record_supertype: this states what the class is rather than what its source declared, and a throwable is an Object
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the throwable it hangs on
code_type
One type the signatures of an entry’s methods mention, as the source wrote it. For example java.util.List<no.sikt.example.Film>, beside the plain java.lang.String and the int that other positions carry.
Primary key: (source_name, type_name). Foreign key: (source_name) references store_source (source_name).
source_name(CHARACTER VARYING, not null)-
the classpath entry whose signatures mention the type; the key’s leading dimension, so a type is swept with the entry that mentioned it rather than outliving it. A type name is global and this relation is not, which is the same trade every relation in the family makes: what a reading read is what it can answer for
type_name(CHARACTER VARYING, not null)-
the type as the source declared it, type arguments kept and packages kept, which is what makes it a key: two Foo<X> from different packages render alike and are two types. A primitive is its own spelling and an array is its component’s with brackets, so the three silences a resolution cannot tell apart, a primitive, an array and a type variable, are told apart here by the name itself. A type variable spells only its own identifier, so two methods writing T share this row; that costs nothing while the only thing stored about it is that it resolves to no class, and stops being adequate the moment anything method-specific is
display_name(CHARACTER VARYING, not null)-
the same type with its packages dropped, which is what a surface shows a person: List<Film> where the name beside it is java.util.List<no.sikt.example.Film>. A rendering and not an identity, which is why it is not the key: two Foo<X> from different packages render alike. Here rather than at each site because a rendering is a property of the type, so it is stated once per type rather than once per position carrying one, and here rather than nowhere because the editor surfaces render a member’s type and a store that held only identities could not tell them what to show
root_class(CHARACTER VARYING, nullable)-
the fully-qualified class the type names at its root position, type arguments dropped: java.util.List for a List<Film>, and the class itself where the type is one. NULL where the root names no class, which a primitive, a void, an array and a type variable are alike in, so a reader asking what a value has to be to be assigned here reads the absence as "not a class" and does not have to tell those four apart; type_name does tell them apart, for the reader that has to. What a position accepts, and deliberately not how many it accepts: a List<Film> accepts a list, and that it delivers films is code_type_element.delivery’s answer to a different question. The two are stated separately because they diverge exactly where it matters, a reader comparing against a jOOQ record class wanting the list and a reader asking whether one value can be handed over wanting the films
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the entry it was read from
code_type_element
What a type resolves to once its delivery containers are peeled off, for the types that resolve to a class at all. For example java.util.List<no.sikt.example.Film> resolving to Film, many of them.
Primary key: (source_name, type_name). Foreign key: (source_name, type_name) references code_type (source_name, type_name). Check: "DELIVERY" IN('DIRECT', 'WRAPPED', 'MANY').
source_name(CHARACTER VARYING, not null)-
the entry whose signatures mention the type, as on code_type; the key’s leading dimension
type_name(CHARACTER VARYING, not null)-
the type, as on code_type, completing the key; the row is deleted with it
element_class(CHARACTER VARYING, not null)-
the binary name of the class the type arrives at once every container is peeled off it. Presence is the fact this relation states, which is why the columns are not on the type: a void, a primitive, an array and a type variable name no class, and a placeholder would make four different silences look like one answer. Not a foreign key: a type delivering a class no classpath entry declares is the ordinary case at the end of a declared type, so a reader learns the name here and learns nothing further about it
delivery(CHARACTER VARYING, not null)-
how a caller receives what the type hands over: DIRECT where the type is the class and nothing was peeled, WRAPPED where containers were peeled and none of them multiplies, MANY where at least one does. A List, a Set, a Collection or a jOOQ Result multiplies; an Optional, a CompletableFuture or a Map does not, those being one value in a wrapper. The decision rather than the containers behind it, which is what lets a reader ask its own question without knowing the vocabulary: whether one value may be handed to a position is DIRECT, and whether a field backed by this type is a list is MANY. Stating it as the container’s own name would make both questions a test against a class name, and a rule that turns on java.util.List not happening to equal java.lang.Integer is a coincidence doing load-bearing work
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the type it hangs on
code_write_slot
One member an author can fill when a value of the class is made, and the call that fills it. For example a FilmInput’s title, filled at argument zero of its canonical constructor.
Primary key: (source_name, class_name, method_name, descriptor, position). Foreign key: (source_name, class_name) references code_construction (source_name, class_name). Foreign key: (source_name, slot_type) references code_type (source_name, type_name). Check: ("DELIVERY" IN('DIRECT', 'WRAPPED', 'MANY'))
OR ("DELIVERY" IS NULL). Check: ("ELEMENT_CLASS" IS NULL) = ("DELIVERY" IS NULL).
source_name(CHARACTER VARYING, not null)-
the entry the class was read from, as on code_construction
class_name(CHARACTER VARYING, not null)-
the class being made, as on code_construction; the row is deleted with it
method_name(CHARACTER VARYING, not null)-
the call that fills the member: the constructor at POSITIONAL, where every slot names the same one, and the setter at SETTERS, where each names its own
descriptor(CHARACTER VARYING, not null)-
that call’s descriptor, completing its key
position(INTEGER, not null)-
which argument of the call carries the member, counted from zero. At POSITIONAL it is the component’s place in the record header, which is what makes the call emittable in one go; at SETTERS it is zero, a setter taking one argument. Part of the key because one call carries many members at POSITIONAL and the argument is what tells them apart
slot_name(CHARACTER VARYING, not null)-
the name @field(name:) resolves against on an input: the record component’s own name, or the property a setter fills, which is the remainder after set with its first letter lowered. Deliberately not unique within a class, on code_read_slot’s terms: a class spelling one property two ways offers it twice and this relation declines to choose between them
slot_type(CHARACTER VARYING, not null)-
what the member is filled with, as code_type spells it. The write side’s answer to the question code_method.result_type answers for reading: a value bound here is coerced into this type. Carried with its parse rather than reached through the call’s own row, because a POSITIONAL call is a constructor and constructors have no code_method row, and an inherited setter has none under the class being made; the write side is a parameter position and says so on code_method_parameter’s terms
erased_class(CHARACTER VARYING, nullable)-
the class the member’s type erases to, on code_method_parameter.erased_class' terms
element_class(CHARACTER VARYING, nullable)-
the class the member takes once its containers are peeled off, on code_method_parameter.element_class' terms: which class the value bound here is built as
delivery(CHARACTER VARYING, nullable)-
how the member takes that class, on code_method_parameter.delivery' terms; NULL with the element beside it
touched_at(TIMESTAMP, not null)-
when the reading that produced this row ran; swept with the construction it hangs on