5 use Drupal\Core\Database\Connection;
6 use Dkan\Datastore\Resource;
38 $this->resource = $resource;
46 $columns = array_keys($this->getSchema()[
'fields']);
47 $numOfColumns =
count($columns);
48 $numOfRows = $this->
count();
49 return new TableSummary($numOfColumns, $columns, $numOfRows);
58 return (
object) [
'resource' => $this->resource];
64 public static function hydrate(
string $json) {
65 $data = json_decode($json);
66 $resource = Resource::hydrate(json_encode($data->resource));
68 return new DatabaseTable(\Drupal::service(
'database'), $resource);
78 if ($this->resource) {
79 return "dkan_datastore_{$this->resource->getId()}";
81 return "dkan_datastore_does_not_exist";
87 protected function prepareData(
string $data,
string $id = NULL): array {
88 $decoded = json_decode($data);
89 if ($decoded === NULL) {
91 'dkan_datastore_import',
92 "Error decoding id:@id, data: @data.",
93 [
'@id' => $id,
'@data' => $data],
96 throw new \Exception(
"Import for {$id} error when decoding {$data}");
98 elseif (!is_array($decoded)) {
100 'dkan_datastore_import',
101 "Array expected while decoding id:@id, data: @data.",
102 [
'@id' => $id,
'@data' => $data],
105 throw new \Exception(
"Import for {$id} returned an error when preparing table header: {$data}");
114 return "record_number";
121 $fields = parent::getNonSerialFields();
122 $index = array_search($this->
primaryKey(), $fields);
123 if ($index !== FALSE) {
124 unset($fields[$index]);
133 $fields = $schema[
'fields'];
142 $fields = array_merge($new_field, $fields);
144 $schema[
'fields'] = $fields;
145 $schema[
'primary key'] = [$this->
primaryKey()];
146 parent::setSchema($schema);