001// --------------------------------------------------------------------------------
002// Copyright 2002-2024 Echo Three, LLC
003//
004// Licensed under the Apache License, Version 2.0 (the "License");
005// you may not use this file except in compliance with the License.
006// You may obtain a copy of the License at
007//
008//     http://www.apache.org/licenses/LICENSE-2.0
009//
010// Unless required by applicable law or agreed to in writing, software
011// distributed under the License is distributed on an "AS IS" BASIS,
012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013// See the License for the specific language governing permissions and
014// limitations under the License.
015// --------------------------------------------------------------------------------
016// Generated File -- DO NOT EDIT BY HAND
017// --------------------------------------------------------------------------------
018
019/**
020 * DocumentClobFactory.java
021 */
022
023package com.echothree.model.data.document.server.factory;
024
025import com.echothree.model.data.document.common.pk.DocumentPK;
026
027import com.echothree.model.data.document.server.entity.Document;
028
029import com.echothree.model.data.document.common.DocumentClobConstants;
030import com.echothree.model.data.document.common.pk.DocumentClobPK;
031import com.echothree.model.data.document.server.value.DocumentClobValue;
032import com.echothree.model.data.document.server.entity.DocumentClob;
033import com.echothree.util.common.exception.PersistenceDatabaseException;
034import com.echothree.util.common.exception.PersistenceDatabaseUpdateException;
035import com.echothree.util.common.exception.PersistenceNotNullException;
036import com.echothree.util.server.persistence.BaseFactory;
037import com.echothree.util.server.persistence.EntityIdGenerator;
038import com.echothree.util.server.persistence.EntityPermission;
039import com.echothree.util.server.persistence.PersistenceDebugFlags;
040import com.echothree.util.server.persistence.Session;
041import com.echothree.util.server.persistence.ThreadSession;
042import java.sql.Clob;
043import java.sql.PreparedStatement;
044import java.sql.ResultSet;
045import java.sql.SQLException;
046import java.sql.Types;
047import java.io.ByteArrayInputStream;
048import java.io.StringReader;
049import java.util.ArrayList;
050import java.util.Collection;
051import java.util.HashSet;
052import java.util.List;
053import java.util.Map;
054import java.util.Set;
055import org.apache.commons.logging.Log;
056import org.apache.commons.logging.LogFactory;
057
058public class DocumentClobFactory
059        implements BaseFactory<DocumentClobPK, DocumentClob> {
060    
061    //final private static Log log = LogFactory.getLog(DocumentClobFactory.class);
062    
063    final private static String SQL_SELECT_READ_ONLY = "SELECT dcmntc_documentclobid, dcmntc_dcmnt_documentid, dcmntc_clob, dcmntc_fromtime, dcmntc_thrutime FROM documentclobs WHERE dcmntc_documentclobid = ?";
064    final private static String SQL_SELECT_READ_WRITE = "SELECT dcmntc_documentclobid, dcmntc_dcmnt_documentid, dcmntc_clob, dcmntc_fromtime, dcmntc_thrutime FROM documentclobs WHERE dcmntc_documentclobid = ? FOR UPDATE";
065    final private static String SQL_INSERT = "INSERT INTO documentclobs (dcmntc_documentclobid, dcmntc_dcmnt_documentid, dcmntc_clob, dcmntc_fromtime, dcmntc_thrutime) VALUES (?, ?, ?, ?, ?)";
066    final private static String SQL_UPDATE = "UPDATE documentclobs SET dcmntc_dcmnt_documentid = ?, dcmntc_clob = ?, dcmntc_fromtime = ?, dcmntc_thrutime = ? WHERE dcmntc_documentclobid = ?";
067    final private static String SQL_DELETE = "DELETE FROM documentclobs WHERE dcmntc_documentclobid = ?";
068    final private static String SQL_VALID = "SELECT COUNT(*) FROM documentclobs WHERE dcmntc_documentclobid = ?";
069    
070    final private static String PK_COLUMN = "dcmntc_documentclobid";
071    final private static String ALL_COLUMNS = "dcmntc_documentclobid, dcmntc_dcmnt_documentid, dcmntc_clob, dcmntc_fromtime, dcmntc_thrutime";
072    final public static String TABLE_NAME = "documentclobs";
073    
074    final public static String DCMNTC_DOCUMENTCLOBID = "dcmntc_documentclobid";
075    final public static String DCMNTC_DCMNT_DOCUMENTID = "dcmntc_dcmnt_documentid";
076    final public static String DCMNTC_CLOB = "dcmntc_clob";
077    final public static String DCMNTC_FROMTIME = "dcmntc_fromtime";
078    final public static String DCMNTC_THRUTIME = "dcmntc_thrutime";
079    
080    final private static EntityIdGenerator entityIdGenerator = new EntityIdGenerator(DocumentClobConstants.COMPONENT_VENDOR_NAME, DocumentClobConstants.ENTITY_TYPE_NAME);
081    
082    /** Creates a new instance of DocumentClobFactory */
083    private DocumentClobFactory() {
084        super();
085    }
086    
087    private static class DocumentClobFactoryHolder {
088        static DocumentClobFactory instance = new DocumentClobFactory();
089    }
090    
091    public static DocumentClobFactory getInstance() {
092        return DocumentClobFactoryHolder.instance;
093    }
094    
095    @Override
096    public String getPKColumn() {
097        return PK_COLUMN;
098    }
099    
100    @Override
101    public String getAllColumns() {
102        return ALL_COLUMNS;
103    }
104    
105    @Override
106    public String getTableName() {
107        return TABLE_NAME;
108    }
109    
110    @Override
111    public String getComponentVendorName() {
112        return DocumentClobConstants.COMPONENT_VENDOR_NAME;
113    }
114    
115    @Override
116    public String getEntityTypeName() {
117        return DocumentClobConstants.ENTITY_TYPE_NAME;
118    }
119    
120    public PreparedStatement prepareStatement(String query) {
121        return ThreadSession.currentSession().prepareStatement(DocumentClobFactory.class, query);
122    }
123    
124    public DocumentClobPK getNextPK() {
125        return new DocumentClobPK(entityIdGenerator.getNextEntityId());
126    }
127    
128    public Set<DocumentClobPK> getPKsFromResultSetAsSet(ResultSet rs)
129            throws PersistenceDatabaseException {
130        Set<DocumentClobPK> _result = new HashSet<>();
131        
132        try {
133            while(rs.next()) {
134                _result.add(getPKFromResultSet(rs));
135            }
136        } catch (SQLException se) {
137            throw new PersistenceDatabaseException(se);
138        }
139        
140        return _result;
141    }
142    
143    public java.util.List<DocumentClobPK> getPKsFromResultSetAsList(ResultSet rs)
144            throws PersistenceDatabaseException {
145        java.util.List<DocumentClobPK> _result = new ArrayList<>();
146        
147        try {
148            while(rs.next()) {
149                _result.add(getPKFromResultSet(rs));
150            }
151        } catch (SQLException se) {
152            throw new PersistenceDatabaseException(se);
153        }
154        
155        return _result;
156    }
157    
158    public DocumentClobPK getPKFromResultSet(ResultSet rs)
159            throws PersistenceDatabaseException {
160        DocumentClobPK _result;
161        
162        try {
163            long dcmntc_documentclobid = rs.getLong(DCMNTC_DOCUMENTCLOBID);
164            Long _entityId = rs.wasNull() ? null : dcmntc_documentclobid;
165            
166            _result = new DocumentClobPK(_entityId);
167        } catch (SQLException se) {
168            throw new PersistenceDatabaseException(se);
169        }
170        
171        return _result;
172    }
173    
174    public java.util.List<DocumentClobValue> getValuesFromPKs(Session session, Collection<DocumentClobPK> pks)
175            throws PersistenceDatabaseException {
176        java.util.List<DocumentClobValue> _values = new ArrayList<>(pks.size());
177        
178        for(DocumentClobPK _pk: pks) {
179            _values.add(getValueFromPK(session, _pk));
180        }
181        
182        return _values;
183    }
184    
185    public DocumentClobValue getValueFromPK(Session session, DocumentClobPK pk)
186            throws PersistenceDatabaseException {
187        DocumentClobValue _value;
188        
189        // See if we already have the entity in the session cache
190        DocumentClob _entity = (DocumentClob)session.getEntity(pk);
191        if(_entity == null)
192            _value = getEntityFromPK(session, EntityPermission.READ_ONLY, pk).getDocumentClobValue();
193        else
194            _value = _entity.getDocumentClobValue();
195        
196        return _value;
197    }
198    
199    public java.util.List<DocumentClobValue> getValuesFromResultSet(Session session, ResultSet rs)
200            throws PersistenceDatabaseException {
201        java.util.List<DocumentClobValue> _result = new ArrayList<>();
202        
203        try {
204            while(rs.next()) {
205                _result.add(getValueFromResultSet(session, rs));
206            }
207        } catch (SQLException se) {
208            throw new PersistenceDatabaseException(se);
209        }
210        
211        return _result;
212    }
213    
214    public DocumentClobValue getValueFromResultSet(Session session, ResultSet rs)
215            throws PersistenceDatabaseException {
216        DocumentClobValue _value;
217        
218        try {
219            Long dcmntc_documentclobid = rs.getLong(DCMNTC_DOCUMENTCLOBID);
220            DocumentClobPK _pk = new DocumentClobPK(dcmntc_documentclobid);
221            
222            // See if we already have the entity in the session cache
223            DocumentClob _entity = (DocumentClob)session.getEntity(_pk);
224            
225            if(_entity == null) {
226                Long dcmntc_dcmnt_documentid = rs.getLong(DCMNTC_DCMNT_DOCUMENTID);
227                if(rs.wasNull())
228                    dcmntc_dcmnt_documentid = null;
229                
230                Clob dcmntc_clob = rs.getClob(DCMNTC_CLOB);
231                if(rs.wasNull())
232                    dcmntc_clob = null;
233                
234                Long dcmntc_fromtime = rs.getLong(DCMNTC_FROMTIME);
235                if(rs.wasNull())
236                    dcmntc_fromtime = null;
237                
238                Long dcmntc_thrutime = rs.getLong(DCMNTC_THRUTIME);
239                if(rs.wasNull())
240                    dcmntc_thrutime = null;
241                
242                _value = new DocumentClobValue(_pk, new DocumentPK(dcmntc_dcmnt_documentid), dcmntc_clob == null? null: dcmntc_clob.getSubString(1L, (int)dcmntc_clob.length()), dcmntc_fromtime, dcmntc_thrutime);
243            } else
244                _value = _entity.getDocumentClobValue();
245        } catch (SQLException se) {
246            throw new PersistenceDatabaseException(se);
247        }
248        
249        return _value;
250    }
251    
252    public java.util.List<DocumentClob> getEntitiesFromPKs(EntityPermission entityPermission, Collection<DocumentClobPK> pks)
253            throws PersistenceDatabaseException {
254        return getEntitiesFromPKs(ThreadSession.currentSession(), entityPermission, pks);
255    }
256    
257    public java.util.List<DocumentClob> getEntitiesFromPKs(Session session, EntityPermission entityPermission, Collection<DocumentClobPK> pks)
258            throws PersistenceDatabaseException {
259        java.util.List<DocumentClob> _entities = new ArrayList<>(pks.size());
260        
261        for(DocumentClobPK _pk: pks) {
262            _entities.add(getEntityFromPK(session, entityPermission, _pk));
263        }
264        
265        return _entities;
266    }
267    
268    public DocumentClob getEntityFromValue(EntityPermission entityPermission, DocumentClobValue value) {
269        return getEntityFromPK(ThreadSession.currentSession(), entityPermission, value.getPrimaryKey());
270    }
271    
272    public DocumentClob getEntityFromValue(Session session, EntityPermission entityPermission, DocumentClobValue value) {
273        return getEntityFromPK(session, entityPermission, value.getPrimaryKey());
274    }
275    
276    public DocumentClob getEntityFromPK(EntityPermission entityPermission, DocumentClobPK pk)
277            throws PersistenceDatabaseException {
278        return getEntityFromPK(ThreadSession.currentSession(), entityPermission, pk);
279    }
280    
281    public DocumentClob getEntityFromCache(Session session, DocumentClobPK pk) {
282        DocumentClobValue _value = (DocumentClobValue)session.getValueCache().get(pk);
283    
284        return _value == null ? null : new DocumentClob(_value, EntityPermission.READ_ONLY);
285    }
286    
287    public DocumentClob getEntityFromPK(Session session, EntityPermission entityPermission, DocumentClobPK pk)
288            throws PersistenceDatabaseException {
289        DocumentClob _entity;
290        
291        // See if we already have the entity in the session cache
292        _entity = (DocumentClob)session.getEntity(pk);
293        if(_entity != null) {
294            // If the requested permission is READ_WRITE, and the cached permission is
295            // READ_ONLY, then pretend that the cached object wasn't found, and create
296            // a new entity that is READ_WRITE.
297            if(entityPermission.equals(EntityPermission.READ_WRITE)) {
298                if(_entity.getEntityPermission().equals(EntityPermission.READ_ONLY))
299                    _entity = null;
300            }
301        }
302        
303        if(_entity == null && entityPermission.equals(EntityPermission.READ_ONLY)) {
304            _entity = getEntityFromCache(session, pk);
305        }
306        
307        if(_entity == null) {
308            PreparedStatement _ps = session.prepareStatement(entityPermission.equals(EntityPermission.READ_ONLY)? SQL_SELECT_READ_ONLY: SQL_SELECT_READ_WRITE);
309            long _entityId = pk.getEntityId();
310            ResultSet _rs = null;
311            
312            try {
313                _ps.setLong(1, _entityId);
314                _rs = _ps.executeQuery();
315                if(_rs.next()) {
316                    _entity = getEntityFromResultSet(session, entityPermission, _rs);
317                }
318            } catch (SQLException se) {
319                throw new PersistenceDatabaseException(se);
320            } finally {
321                if(_rs != null) {
322                    try {
323                        _rs.close();
324                    } catch (SQLException se) {
325                        // do nothing
326                    }
327                }
328            }
329        }
330        
331        return _entity;
332    }
333    
334    public Set<DocumentClobPK> getPKsFromQueryAsSet(PreparedStatement ps, final Object... params)
335            throws PersistenceDatabaseException {
336        Set<DocumentClobPK> _pks;
337        ResultSet _rs = null;
338        
339        try {
340            if(params.length != 0) {
341                Session.setQueryParams(ps, params);
342            }
343            
344            _rs = ps.executeQuery();
345            _pks = getPKsFromResultSetAsSet(_rs);
346            _rs.close();
347        } catch (SQLException se) {
348            throw new PersistenceDatabaseException(se);
349        } finally {
350            if(_rs != null) {
351                try {
352                    _rs.close();
353                } catch (SQLException se) {
354                    // do nothing
355                }
356            }
357        }
358        
359        return _pks;
360    }
361    
362    public java.util.List<DocumentClobPK> getPKsFromQueryAsList(PreparedStatement ps, final Object... params)
363            throws PersistenceDatabaseException {
364        java.util.List<DocumentClobPK> _pks;
365        ResultSet _rs = null;
366        
367        try {
368            if(params.length != 0) {
369                Session.setQueryParams(ps, params);
370            }
371            
372            _rs = ps.executeQuery();
373            _pks = getPKsFromResultSetAsList(_rs);
374            _rs.close();
375        } catch (SQLException se) {
376            throw new PersistenceDatabaseException(se);
377        } finally {
378            if(_rs != null) {
379                try {
380                    _rs.close();
381                } catch (SQLException se) {
382                    // do nothing
383                }
384            }
385        }
386        
387        return _pks;
388    }
389    
390    public DocumentClobPK getPKFromQuery(PreparedStatement ps, final Object... params)
391            throws PersistenceDatabaseException {
392        DocumentClobPK _pk = null;
393        ResultSet _rs = null;
394        
395        try {
396            if(params.length != 0) {
397                Session.setQueryParams(ps, params);
398            }
399            
400            _rs = ps.executeQuery();
401            if(_rs.next()) {
402                _pk = getPKFromResultSet(_rs);
403            }
404            _rs.close();
405        } catch (SQLException se) {
406            throw new PersistenceDatabaseException(se);
407        } finally {
408            if(_rs != null) {
409                try {
410                    _rs.close();
411                } catch (SQLException se) {
412                    // do nothing
413                }
414            }
415        }
416        
417        return _pk;
418    }
419    
420    public java.util.List<DocumentClob> getEntitiesFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
421            throws PersistenceDatabaseException {
422        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
423        
424        return getEntitiesFromQuery(session, entityPermission, ps, params);
425    }
426    
427    public java.util.List<DocumentClob> getEntitiesFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
428            throws PersistenceDatabaseException {
429        Session session = ThreadSession.currentSession();
430        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
431        
432        return getEntitiesFromQuery(session, entityPermission, ps, params);
433    }
434    
435    public java.util.List<DocumentClob> getEntitiesFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
436            throws PersistenceDatabaseException {
437        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
438        
439        return getEntitiesFromQuery(session, entityPermission, ps);
440    }
441    
442    public java.util.List<DocumentClob> getEntitiesFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
443            throws PersistenceDatabaseException {
444        Session session = ThreadSession.currentSession();
445        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
446        
447        return getEntitiesFromQuery(session, entityPermission, ps);
448    }
449    
450    public java.util.List<DocumentClob> getEntitiesFromQuery(EntityPermission entityPermission, PreparedStatement ps)
451            throws PersistenceDatabaseException {
452        return getEntitiesFromQuery(ThreadSession.currentSession(), entityPermission, ps);
453    }
454    
455    public java.util.List<DocumentClob> getEntitiesFromQuery(EntityPermission entityPermission, PreparedStatement ps, final Object... params)
456            throws PersistenceDatabaseException {
457        return getEntitiesFromQuery(ThreadSession.currentSession(), entityPermission, ps, params);
458    }
459    
460    public java.util.List<DocumentClob> getEntitiesFromQuery(Session session, EntityPermission entityPermission, PreparedStatement ps, final Object... params)
461            throws PersistenceDatabaseException {
462        java.util.List<DocumentClob> _entities;
463        ResultSet _rs = null;
464        
465        try {
466            if(params.length != 0) {
467                Session.setQueryParams(ps, params);
468            }
469            
470            _rs = ps.executeQuery();
471            _entities = getEntitiesFromResultSet(session, entityPermission, _rs);
472            _rs.close();
473        } catch (SQLException se) {
474            throw new PersistenceDatabaseException(se);
475        } finally {
476            if(_rs != null) {
477                try {
478                    _rs.close();
479                } catch (SQLException se) {
480                    // do nothing
481                }
482            }
483        }
484        
485        return _entities;
486    }
487    
488    public DocumentClob getEntityFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
489            throws PersistenceDatabaseException {
490        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
491        
492        return getEntityFromQuery(session, entityPermission, ps, params);
493    }
494    
495    public DocumentClob getEntityFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
496            throws PersistenceDatabaseException {
497        Session session = ThreadSession.currentSession();
498        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
499        
500        return getEntityFromQuery(session, entityPermission, ps, params);
501    }
502    
503    public DocumentClob getEntityFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
504            throws PersistenceDatabaseException {
505        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
506        
507        return getEntityFromQuery(session, entityPermission, ps);
508    }
509    
510    public DocumentClob getEntityFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
511            throws PersistenceDatabaseException {
512        Session session = ThreadSession.currentSession();
513        PreparedStatement ps = session.prepareStatement(DocumentClobFactory.class, queryMap.get(entityPermission));
514        
515        return getEntityFromQuery(session, entityPermission, ps);
516    }
517    
518    public DocumentClob getEntityFromQuery(EntityPermission entityPermission, PreparedStatement ps)
519            throws PersistenceDatabaseException {
520        return getEntityFromQuery(ThreadSession.currentSession(), entityPermission, ps);
521    }
522    
523    public DocumentClob getEntityFromQuery(EntityPermission entityPermission, PreparedStatement ps, final Object... params)
524            throws PersistenceDatabaseException {
525        return getEntityFromQuery(ThreadSession.currentSession(), entityPermission, ps, params);
526    }
527    
528    public DocumentClob getEntityFromQuery(Session session, EntityPermission entityPermission, PreparedStatement ps, final Object... params)
529            throws PersistenceDatabaseException {
530        DocumentClob _entity = null;
531        ResultSet _rs = null;
532        
533        try {
534            if(params.length != 0) {
535                Session.setQueryParams(ps, params);
536            }
537            
538            _rs = ps.executeQuery();
539            if(_rs.next()) {
540                _entity = getEntityFromResultSet(session, entityPermission, _rs);
541            }
542            _rs.close();
543        } catch (SQLException se) {
544            throw new PersistenceDatabaseException(se);
545        } finally {
546            if(_rs != null) {
547                try {
548                    _rs.close();
549                } catch (SQLException se) {
550                    // do nothing
551                }
552            }
553        }
554        
555        return _entity;
556    }
557    
558    public java.util.List<DocumentClob> getEntitiesFromResultSet(EntityPermission entityPermission, ResultSet rs)
559            throws PersistenceDatabaseException {
560        return getEntitiesFromResultSet(ThreadSession.currentSession(), entityPermission, rs);
561    }
562    
563    public java.util.List<DocumentClob> getEntitiesFromResultSet(Session session, EntityPermission entityPermission, ResultSet rs)
564            throws PersistenceDatabaseException {
565        java.util.List<DocumentClob> _result = new ArrayList<>();
566        
567        try {
568            while(rs.next()) {
569                _result.add(getEntityFromResultSet(session, entityPermission, rs));
570            }
571        } catch (SQLException se) {
572            throw new PersistenceDatabaseException(se);
573        }
574        
575        return _result;
576    }
577    
578    public DocumentClob getEntityFromResultSet(EntityPermission entityPermission, ResultSet rs)
579            throws PersistenceDatabaseException {
580        return getEntityFromResultSet(ThreadSession.currentSession(), entityPermission, rs);
581    }
582    
583    public DocumentClob getEntityFromResultSet(Session session, EntityPermission entityPermission, ResultSet rs)
584            throws PersistenceDatabaseException {
585        DocumentClob _entity;
586        
587        try {
588            Long dcmntc_documentclobid = rs.getLong(DCMNTC_DOCUMENTCLOBID);
589            DocumentClobPK _pk = new DocumentClobPK(dcmntc_documentclobid);
590            
591            // See if we already have the entity in the session cache
592            _entity = (DocumentClob)session.getEntity(_pk);
593            if(_entity != null) {
594                // If the requested permission is READ_WRITE, and the cached permission is
595                // READ_ONLY, then pretend that the cached object wasn't found, and create
596                // a new entity that is READ_WRITE.
597                if(entityPermission.equals(EntityPermission.READ_WRITE)) {
598                    if(_entity.getEntityPermission().equals(EntityPermission.READ_ONLY))
599                        _entity = null;
600                }
601            }
602            boolean foundInSessionCache = _entity != null;
603            
604            if(_entity == null && entityPermission.equals(EntityPermission.READ_ONLY)) {
605                _entity = getEntityFromCache(session, _pk);
606            }
607            
608            if(_entity == null) {
609                Long dcmntc_dcmnt_documentid = rs.getLong(DCMNTC_DCMNT_DOCUMENTID);
610                if(rs.wasNull())
611                    dcmntc_dcmnt_documentid = null;
612                
613                Clob dcmntc_clob = rs.getClob(DCMNTC_CLOB);
614                if(rs.wasNull())
615                    dcmntc_clob = null;
616                
617                Long dcmntc_fromtime = rs.getLong(DCMNTC_FROMTIME);
618                if(rs.wasNull())
619                    dcmntc_fromtime = null;
620                
621                Long dcmntc_thrutime = rs.getLong(DCMNTC_THRUTIME);
622                if(rs.wasNull())
623                    dcmntc_thrutime = null;
624                
625                DocumentClobValue _value = new DocumentClobValue(_pk, dcmntc_dcmnt_documentid == null? null: new DocumentPK(dcmntc_dcmnt_documentid), dcmntc_clob == null? null: dcmntc_clob.getSubString(1L, (int)dcmntc_clob.length()), dcmntc_fromtime, dcmntc_thrutime);
626                _entity = new DocumentClob(_value, entityPermission);
627            }
628            
629            if(!foundInSessionCache) {
630                if(entityPermission.equals(EntityPermission.READ_ONLY)) {
631                    session.putReadOnlyEntity(_pk, _entity);
632                    session.getValueCache().put(_entity.getDocumentClobValue());
633                } else {
634                    session.putReadWriteEntity(_pk, _entity);
635                }
636            }
637        } catch (SQLException se) {
638            throw new PersistenceDatabaseException(se);
639        }
640        
641        return _entity;
642    }
643    
644    public DocumentClob create(Session session, Document document, String clob, Long fromTime, Long thruTime)
645            throws PersistenceDatabaseException, PersistenceNotNullException {
646        return create(session, document == null ? null : document.getPrimaryKey(), clob, fromTime, thruTime);
647    }
648    
649    public DocumentClob create(Document document, String clob, Long fromTime, Long thruTime)
650            throws PersistenceDatabaseException, PersistenceNotNullException {
651        return create(ThreadSession.currentSession(), document == null ? null : document.getPrimaryKey(), clob, fromTime, thruTime);
652    }
653    
654    private void bindForCreate(PreparedStatement _ps, DocumentClobValue _value)
655            throws SQLException {
656        _ps.setLong(1, _value.getEntityId());
657        
658        DocumentPK dcmntc_dcmnt_documentid = _value.getDocumentPK();
659        if(dcmntc_dcmnt_documentid == null)
660            _ps.setNull(2, Types.BIGINT);
661        else
662            _ps.setLong(2, dcmntc_dcmnt_documentid.getEntityId());
663            
664        String dcmntc_clob = _value.getClob();
665        if(dcmntc_clob == null)
666            _ps.setNull(3, Types.CLOB);
667        else
668            _ps.setCharacterStream(3, new StringReader(dcmntc_clob), dcmntc_clob.length());
669            
670        Long dcmntc_fromtime = _value.getFromTime();
671        if(dcmntc_fromtime == null)
672            _ps.setNull(4, Types.BIGINT);
673        else
674            _ps.setLong(4, dcmntc_fromtime);
675            
676        Long dcmntc_thrutime = _value.getThruTime();
677        if(dcmntc_thrutime == null)
678            _ps.setNull(5, Types.BIGINT);
679        else
680            _ps.setLong(5, dcmntc_thrutime);
681            
682    }
683    
684    public DocumentClob create(Session session, DocumentPK documentPK, String clob, Long fromTime, Long thruTime)
685            throws PersistenceDatabaseException, PersistenceNotNullException {
686        DocumentClobPK _pk = getNextPK();
687        DocumentClobValue _value = new DocumentClobValue(_pk, documentPK, clob, fromTime, thruTime);
688        
689        PreparedStatement _ps = session.prepareStatement(SQL_INSERT);
690        
691        try {
692            bindForCreate(_ps, _value);
693            
694            if(PersistenceDebugFlags.CheckEntityInsertRowCount) {
695                int _count = _ps.executeUpdate();
696                
697                if(_count != 1) {
698                    throw new PersistenceDatabaseUpdateException("insert failed, _count = " + _count);
699                }
700            } else {
701                 _ps.executeUpdate();
702            }
703            
704            session.getValueCache().put(_value);
705        } catch (SQLException se) {
706            throw new PersistenceDatabaseException(se);
707        }
708        
709        DocumentClob _entity = new DocumentClob(_value, EntityPermission.READ_ONLY);
710        session.putReadOnlyEntity(_pk, _entity);
711        
712        return _entity;
713    }
714    
715    public DocumentClob create(DocumentPK documentPK, String clob, Long fromTime, Long thruTime)
716            throws PersistenceDatabaseException, PersistenceNotNullException {
717        return create(ThreadSession.currentSession(), documentPK, clob, fromTime, thruTime);
718    }
719    
720    public void create(Session session, Collection<DocumentClobValue> _values)
721            throws PersistenceDatabaseException, PersistenceNotNullException {
722        int _size = _values.size();
723        
724        if(_size > 0) {
725            PreparedStatement _ps = session.prepareStatement(SQL_INSERT);
726            List<DocumentClobValue> _cacheValues = new ArrayList<>(_size);
727            
728            try {
729                for(DocumentClobValue _value : _values) {
730                    _value.setEntityId(entityIdGenerator.getNextEntityId());
731                    bindForCreate(_ps, _value);
732                    
733                    _ps.addBatch();
734                    
735                    _cacheValues.add(_value);
736                }
737                
738                if(PersistenceDebugFlags.CheckEntityInsertRowCount) {
739                    int[] _counts = _ps.executeBatch();
740                    
741                    for(int _countOffset = 0 ; _countOffset < _size ; _countOffset++) {
742                        if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
743                            throw new PersistenceDatabaseUpdateException("batch insert failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
744                        }
745                    }
746                } else {
747                     _ps.executeBatch();
748                }
749                
750                _ps.clearBatch();
751            } catch (SQLException se) {
752                throw new PersistenceDatabaseException(se);
753            }
754            
755            _cacheValues.forEach((_cacheValue) -> {
756                DocumentClob _cacheEntity = new DocumentClob(_cacheValue, EntityPermission.READ_ONLY);
757                
758                session.putReadOnlyEntity(_cacheValue.getPrimaryKey(), _cacheEntity);
759            });
760        }
761    }
762    
763    public void create(Collection<DocumentClobValue> _values)
764            throws PersistenceDatabaseException, PersistenceNotNullException {
765        create(ThreadSession.currentSession(), _values);
766    }
767    
768    private boolean bindForStore(PreparedStatement _ps, DocumentClobValue _value)
769            throws SQLException {
770        boolean _hasBeenModified = _value.hasBeenModified();
771        
772        if(_hasBeenModified) {
773            DocumentPK dcmntc_dcmnt_documentid = _value.getDocumentPK();
774            if(dcmntc_dcmnt_documentid == null)
775                _ps.setNull(1, Types.BIGINT);
776            else
777                _ps.setLong(1, dcmntc_dcmnt_documentid.getEntityId());
778            
779            String dcmntc_clob = _value.getClob();
780            if(dcmntc_clob == null)
781                _ps.setNull(2, Types.CLOB);
782            else
783                _ps.setCharacterStream(2, new StringReader(dcmntc_clob), dcmntc_clob.length());
784            
785            Long dcmntc_fromtime = _value.getFromTime();
786            if(dcmntc_fromtime == null)
787                _ps.setNull(3, Types.BIGINT);
788            else
789                _ps.setLong(3, dcmntc_fromtime);
790            
791            Long dcmntc_thrutime = _value.getThruTime();
792            if(dcmntc_thrutime == null)
793                _ps.setNull(4, Types.BIGINT);
794            else
795                _ps.setLong(4, dcmntc_thrutime);
796            
797            _ps.setLong(5, _value.getPrimaryKey().getEntityId());
798            
799            _value.clearHasBeenModified();
800        }
801        
802        return _hasBeenModified;
803    }
804    
805    @Override
806    public void store(Session session, DocumentClob entity)
807            throws PersistenceDatabaseException {
808        PreparedStatement _ps = session.prepareStatement(SQL_UPDATE);
809        
810        try {
811            DocumentClobValue _value = entity.getDocumentClobValue();
812            
813            if(bindForStore(_ps, _value)) {
814                if(PersistenceDebugFlags.CheckEntityUpdateRowCount) {
815                    int _count = _ps.executeUpdate();
816                    
817                    if(_count != 1) {
818                        throw new PersistenceDatabaseUpdateException("update failed, _count = " + _count);
819                    }
820                } else {
821                     _ps.executeUpdate();
822                }
823                
824                session.getValueCache().put(_value);
825            }
826        } catch (SQLException se) {
827            throw new PersistenceDatabaseException(se);
828        }
829    }
830    
831    @Override
832    public void store(Session session, Collection<DocumentClob> entities)
833            throws PersistenceDatabaseException {
834        if(entities.size() > 0) {
835            PreparedStatement _ps = session.prepareStatement(SQL_UPDATE);
836            int _modifiedEntities = 0;
837            
838            try {
839                for(DocumentClob entity : entities) {
840                    if(bindForStore(_ps, entity.getDocumentClobValue())) {
841                        _ps.addBatch();
842                        _modifiedEntities++;
843                    }
844                }
845                
846                if(_modifiedEntities != 0) {
847                    if(PersistenceDebugFlags.CheckEntityUpdateRowCount) {
848                        int[] _counts = _ps.executeBatch();
849                        
850                        for(int _countOffset = 0 ; _countOffset < _modifiedEntities  ; _countOffset++) {
851                            if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
852                                throw new PersistenceDatabaseUpdateException("batch update failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
853                            }
854                        }
855                    } else {
856                         _ps.executeBatch();
857                    }
858                    
859                    _ps.clearBatch();
860                    
861                    entities.forEach((entity) -> {
862                        session.getValueCache().put(entity.getDocumentClobValue());
863                    });
864                }
865            } catch (SQLException se) {
866                throw new PersistenceDatabaseException(se);
867            }
868        }
869    }
870    
871    @Override
872    public void store(Collection<DocumentClob> entities)
873            throws PersistenceDatabaseException {
874        store(ThreadSession.currentSession(), entities);
875    }
876    
877    @Override
878    public void remove(Session session, DocumentClob entity)
879            throws PersistenceDatabaseException {
880        remove(session, entity.getPrimaryKey());
881    }
882    
883    @Override
884    public void remove(Session session, DocumentClobPK pk)
885            throws PersistenceDatabaseException {
886        PreparedStatement _ps = session.prepareStatement(SQL_DELETE);
887        long _entityId = pk.getEntityId();
888        
889        try {
890            _ps.setLong(1, _entityId);
891            
892            if(PersistenceDebugFlags.CheckEntityDeleteRowCount) {
893                int _count = _ps.executeUpdate();
894                
895                if(_count != 1) {
896                    throw new PersistenceDatabaseUpdateException("remove failed, _count = " + _count);
897                }
898            } else {
899                 _ps.executeUpdate();
900            }
901            
902            session.getValueCache().remove(pk);
903        } catch (SQLException se) {
904            throw new PersistenceDatabaseException(se);
905        }
906        
907        session.removed(pk, false);
908    }
909    
910    @Override
911    public void remove(Session session, Collection<DocumentClobPK> pks)
912            throws PersistenceDatabaseException {
913        if(pks.size() > 0) {
914            PreparedStatement _ps = session.prepareStatement(SQL_DELETE);
915            int _modifiedEntities = 0;
916            
917            try {
918                for(DocumentClobPK pk : pks) {
919                    long _entityId = pk.getEntityId();
920                    
921                    _ps.setLong(1, _entityId);
922                    
923                    _ps.addBatch();
924                    _modifiedEntities++;
925                }
926                
927                if(_modifiedEntities != 0) {
928                    if(PersistenceDebugFlags.CheckEntityDeleteRowCount) {
929                        int[] _counts = _ps.executeBatch();
930                        
931                        for(int _countOffset = 0 ; _countOffset < _modifiedEntities  ; _countOffset++) {
932                            if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
933                                throw new PersistenceDatabaseUpdateException("batch remove failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
934                            }
935                        }
936                    } else {
937                        _ps.executeBatch();
938                    }
939                    
940                    _ps.clearBatch();
941                    
942                    pks.forEach((pk) -> {
943                        session.getValueCache().remove(pk);
944                    });
945                }
946            } catch (SQLException se) {
947                throw new PersistenceDatabaseException(se);
948            }
949            
950            pks.forEach((pk) -> {
951                session.removed(pk, true);
952            });
953        }
954    }
955    
956    @Override
957    public void remove(Collection<DocumentClobPK> pks)
958            throws PersistenceDatabaseException {
959        remove(ThreadSession.currentSession(), pks);
960    }
961    
962    @Override
963    public boolean validPK(Session session, DocumentClobPK pk)
964            throws PersistenceDatabaseException {
965        boolean valid = false;
966        PreparedStatement _ps = session.prepareStatement(SQL_VALID);
967        ResultSet _rs = null;
968        
969        try {
970            _ps.setLong(1, pk.getEntityId());
971            
972            _rs = _ps.executeQuery();
973            if(_rs.next()) {
974                long _count = _rs.getLong(1);
975                if(_rs.wasNull())
976                    _count = 0;
977                
978                if(_count == 1)
979                    valid = true;
980            }
981        } catch (SQLException se) {
982            throw new PersistenceDatabaseException(se);
983        } finally {
984            if(_rs != null) {
985                try {
986                    _rs.close();
987                } catch (SQLException se) {
988                    // do nothing
989                }
990            }
991        }
992        
993        return valid;
994    }
995    
996}