MCPcopy Create free account
hub / github.com/Rello/analytics / create

Method create

lib/Db/StorageMapper.php:59–128  ·  view source on GitHub ↗

* create data * @param int $datasetId * @param $dimension1 * @param $dimension2 * @param $value * @param string|null $user_id * @param null $timestamp * @param $bulkInsert * @param $aggregation * @return string * @throws Exception */

(int $datasetId, $dimension1, $dimension2, $value, ?string $user_id = null, $timestamp = null, $bulkInsert = null, $aggregation = null)

Source from the content-addressed store, hash-verified

57 * @throws Exception
58 */
59 public function create(int $datasetId, $dimension1, $dimension2, $value, ?string $user_id = null, $timestamp = null, $bulkInsert = null, $aggregation = null)
60 {
61 $dimension1 = $dimension1 !== null ? str_replace('*', '', $dimension1) : null;
62 $dimension2 = $dimension2 !== null ? str_replace('*', '', $dimension2) : null;
63 $timestamp = $timestamp ?? time();
64 $result = '';
65
66 if ($user_id) $this->userId = $user_id;
67
68 // if the data source option to delete all date before loading is "true"
69 // in this case, bulkInsert is set to true. Then no further checks for existing records is needed
70 if ($bulkInsert === null) {
71 $sql = $this->db->getQueryBuilder();
72 $sql->from(self::TABLE_NAME)
73 ->addSelect('value')
74 ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
75 ->andWhere($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
76
77 // if the dimension value is null, a different where clause is required
78 $expression1 = $dimension1 === null ? $sql->expr()->isNull('dimension1') : $sql->expr()->eq('dimension1', $sql->createNamedParameter($dimension1));
79 $expression2 = $dimension2 === null ? $sql->expr()->isNull('dimension2') : $sql->expr()->eq('dimension2', $sql->createNamedParameter($dimension2));
80
81 $sql->andWhere($expression1)
82 ->andWhere($expression2);
83
84 $statement = $sql->executeQuery();
85 $result = $statement->fetch();
86 $statement->closeCursor();
87 }
88
89 if ($result) {
90 $sql = $this->db->getQueryBuilder();
91 $sql->update(self::TABLE_NAME)
92 ->set('timestamp', $sql->createNamedParameter($timestamp))
93 ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
94 ->andWhere($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
95
96 // if the dimension value is null, a different where clause is required
97 $expression1 = $dimension1 === null ? $sql->expr()->isNull('dimension1') : $sql->expr()->eq('dimension1', $sql->createNamedParameter($dimension1));
98 $expression2 = $dimension2 === null ? $sql->expr()->isNull('dimension2') : $sql->expr()->eq('dimension2', $sql->createNamedParameter($dimension2));
99
100 $sql->andWhere($expression1)
101 ->andWhere($expression2);
102
103 if ($aggregation === 'xxsummation') {
104 // Feature not yet available
105 // $this->logger->error('old value: ' . $result['value']);
106 // $this->logger->error('new value: ' . $value + $result['value']);
107 $sql->set('value', $sql->createNamedParameter($value + $result['value']));
108 } else {
109 $sql->set('value', $sql->createNamedParameter($value));
110 }
111
112 $sql->executeStatement();
113 return 'update';
114 } else {
115 $sql = $this->db->getQueryBuilder();
116 $sql->insert(self::TABLE_NAME)

Callers

nothing calls this directly

Calls 2

setMethod · 0.80
updateMethod · 0.45

Tested by

no test coverage detected