DataAccessor

Trait DataAccessor 

Source
pub trait DataAccessor<S: Scalar>: MetadataAccessor {
    // Required method
    fn get_column(
        &self,
        table_ref: &TableRef,
        column_id: &Ident,
    ) -> Column<'_, S>;

    // Provided method
    fn get_table(
        &self,
        table_ref: &TableRef,
        column_ids: &IndexSet<Ident, BuildHasherDefault<AHasher>>,
    ) -> Table<'_, S> { ... }
}
Expand description

Access database columns of an in-memory table span.

Prover uses this information to process a query.

In pseudo-code, here is a sketch of how DataAccessor fits in with the prove workflow:

prove(query, database) {
      if(!validate_query(query, database)) {
          // if the query references columns that don't exist
          // we should error here before going any further
          invalid-query()
      }
      update-cached-columns(database, query)
           // if the database represents an in-memory cache of an externally persisted
           // database we should update the cache so that any column referenced in the query
           // will be available
      database.reader_lock()
          // we can't be updating the database while proving
      accessor <- make-data-accessor(database)
      proof <- prove-valid-query(query, accessor)
      database.reader_unlock()
      return proof
}

Note: we assume that the query has already been validated so that we will only be accessing information about columns that exist in the database.

Required Methods§

Source

fn get_column(&self, table_ref: &TableRef, column_id: &Ident) -> Column<'_, S>

Return the data span in the table (not the full-table data)

Provided Methods§

Source

fn get_table( &self, table_ref: &TableRef, column_ids: &IndexSet<Ident, BuildHasherDefault<AHasher>>, ) -> Table<'_, S>

Creates a new Table from a TableRef and Idents.

Columns are retrieved from the DataAccessor using the provided TableRef and Idents. The only reason why [table_ref] is needed is because [column_ids] can be empty.

§Panics

Column length mismatches can occur in theory. In practice, this should not happen.

Implementors§

Source§

impl<'a, CP: CommitmentEvaluationProof> DataAccessor<<CP as CommitmentEvaluationProof>::Scalar> for TableTestAccessor<'a, CP>

§Panics

Will panic if the table_ref is not found in self.tables, or if the column_id is not found in the inner table for that reference, indicating that an invalid column reference was provided.

Source§

impl<CP: CommitmentEvaluationProof> DataAccessor<<CP as CommitmentEvaluationProof>::Scalar> for OwnedTableTestAccessor<'_, CP>

§Panics

Will panic if the table_ref is not found in self.tables, or if the column_id is not found in the inner table for that reference, indicating that an invalid column reference was provided.