Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/importer/ImportWstColumnQRange.java @ 8986:392bbcd8a88b
Database inserts accelerated by suppressing unnecessary database queries for new data series
author | mschaefer |
---|---|
date | Sun, 08 Apr 2018 18:07:06 +0200 |
parents | 5e38e2924c07 |
children |
comparison
equal
deleted
inserted
replaced
8985:27851cfda84a | 8986:392bbcd8a88b |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.importer; | 9 package org.dive4elements.river.importer; |
10 | 10 |
11 import java.util.List; | |
12 | |
13 import org.dive4elements.river.importer.common.StoreMode; | |
14 import org.dive4elements.river.model.River; | |
15 import org.dive4elements.river.model.WstColumn; | |
11 import org.dive4elements.river.model.WstColumnQRange; | 16 import org.dive4elements.river.model.WstColumnQRange; |
12 import org.dive4elements.river.model.WstQRange; | 17 import org.dive4elements.river.model.WstQRange; |
13 import org.dive4elements.river.model.WstColumn; | 18 import org.hibernate.Query; |
14 import org.dive4elements.river.model.River; | |
15 | |
16 import org.hibernate.Session; | 19 import org.hibernate.Session; |
17 import org.hibernate.Query; | |
18 | |
19 import java.util.List; | |
20 | 20 |
21 public class ImportWstColumnQRange | 21 public class ImportWstColumnQRange |
22 { | 22 { |
23 protected ImportWstColumn wstColumn; | 23 protected ImportWstColumn wstColumn; |
24 protected ImportWstQRange qRange; | 24 protected ImportWstQRange qRange; |
25 | |
26 protected StoreMode storeMode; | |
25 | 27 |
26 protected WstColumnQRange peer; | 28 protected WstColumnQRange peer; |
27 | 29 |
28 public ImportWstColumnQRange() { | 30 public ImportWstColumnQRange() { |
29 } | 31 } |
30 | 32 |
31 public ImportWstColumnQRange( | 33 public ImportWstColumnQRange( |
32 ImportWstColumn wstColumn, | 34 final ImportWstColumn wstColumn, |
33 ImportWstQRange qRange | 35 final ImportWstQRange qRange |
34 ) { | 36 ) { |
35 this.wstColumn = wstColumn; | 37 this.wstColumn = wstColumn; |
36 this.qRange = qRange; | 38 this.qRange = qRange; |
39 this.storeMode = StoreMode.NONE; | |
37 } | 40 } |
38 | 41 |
39 public ImportWstColumn getWstColumn() { | 42 public ImportWstColumn getWstColumn() { |
40 return wstColumn; | 43 return this.wstColumn; |
41 } | 44 } |
42 | 45 |
43 public void setWstColumn(ImportWstColumn wstColumn) { | 46 public void setWstColumn(final ImportWstColumn wstColumn) { |
44 this.wstColumn = wstColumn; | 47 this.wstColumn = wstColumn; |
45 } | 48 } |
46 | 49 |
47 public ImportWstQRange getQRange() { | 50 public ImportWstQRange getQRange() { |
48 return qRange; | 51 return this.qRange; |
49 } | 52 } |
50 | 53 |
51 public void setQRange(ImportWstQRange qRange) { | 54 public void setQRange(final ImportWstQRange qRange) { |
52 this.qRange = qRange; | 55 this.qRange = qRange; |
53 } | 56 } |
54 | 57 |
55 public WstColumnQRange getPeer(River river) { | 58 public WstColumnQRange getPeer(final River river) { |
56 if (peer == null) { | 59 if (this.peer == null) { |
57 WstColumn c = wstColumn.getPeer(river); | 60 final WstColumn c = this.wstColumn.getPeer(river); |
58 WstQRange q = qRange.getPeer(river); | 61 final WstQRange q = this.qRange.getPeer(river); |
59 Session session = ImporterSession.getInstance() | 62 List<WstColumnQRange> cols; |
60 .getDatabaseSession(); | 63 final Session session = ImporterSession.getInstance() |
61 Query query = session.createQuery( | 64 .getDatabaseSession(); |
62 "from WstColumnQRange where " + | 65 if (this.wstColumn.storeMode == StoreMode.INSERT) |
63 "wstColumn=:c and wstQRange=:q"); | 66 cols = null; |
64 query.setParameter("c", c); | 67 else { |
65 query.setParameter("q", q); | 68 final Query query = session.createQuery( |
66 List<WstColumnQRange> cols = query.list(); | 69 "from WstColumnQRange where " + |
67 if (cols.isEmpty()) { | 70 "wstColumn=:c and wstQRange=:q"); |
68 peer = new WstColumnQRange(c, q); | 71 query.setParameter("c", c); |
69 session.save(peer); | 72 query.setParameter("q", q); |
73 cols = query.list(); | |
74 } | |
75 if ((cols == null) || cols.isEmpty()) { | |
76 this.peer = new WstColumnQRange(c, q); | |
77 session.save(this.peer); | |
78 this.storeMode = StoreMode.INSERT; | |
70 } | 79 } |
71 else { | 80 else { |
72 peer = cols.get(0); | 81 this.peer = cols.get(0); |
82 this.storeMode = StoreMode.UPDATE; | |
73 } | 83 } |
74 } | 84 } |
75 return peer; | 85 return this.peer; |
76 } | 86 } |
77 } | 87 } |
78 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 88 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |