示例#1
0
 @Override
 public synchronized boolean equals(java.lang.Object obj) {
   if (!(obj instanceof PropertySpec)) {
     return false;
   }
   PropertySpec other = (PropertySpec) obj;
   if (obj == null) {
     return false;
   }
   if (this == obj) {
     return true;
   }
   if (__equalsCalc != null) {
     return (__equalsCalc == obj);
   }
   __equalsCalc = obj;
   boolean _equals;
   _equals =
       super.equals(obj)
           && ((this.type == null && other.getType() == null)
               || (this.type != null && this.type.equals(other.getType())))
           && ((this.all == null && other.getAll() == null)
               || (this.all != null && this.all.equals(other.getAll())))
           && ((this.pathSet == null && other.getPathSet() == null)
               || (this.pathSet != null
                   && java.util.Arrays.equals(this.pathSet, other.getPathSet())));
   __equalsCalc = null;
   return _equals;
 }
  @Override
  public void process(ResultSet resultSet) throws SQLException {
    ResultCache<Constant> results = getResults();
    EntitySpec entitySpec = getEntitySpec();
    String entitySpecName = entitySpec.getName();
    // boolean hasRefs = entitySpec.getInboundRefSpecs().length > 0;
    String[] propIds = entitySpec.getPropositionIds();
    ColumnSpec codeSpec = entitySpec.getCodeSpec();
    if (codeSpec != null) {
      List<ColumnSpec> codeSpecL = codeSpec.asList();
      codeSpec = codeSpecL.get(codeSpecL.size() - 1);
    }
    Logger logger = SQLGenUtil.logger();
    PropertySpec[] propertySpecs = entitySpec.getPropertySpecs();
    Value[] propertyValues = new Value[propertySpecs.length];
    int count = 0;
    String[] uniqueIds = new String[entitySpec.getUniqueIdSpecs().length];
    SourceSystem dsType = DataSourceBackendSourceSystem.getInstance(getDataSourceBackendId());
    ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
    int[] columnTypes = new int[resultSetMetaData.getColumnCount()];
    for (int i = 0; i < columnTypes.length; i++) {
      columnTypes[i] = resultSetMetaData.getColumnType(i + 1);
    }

    while (resultSet.next()) {
      int i = 1;
      String keyId = resultSet.getString(i++);
      if (keyId == null) {
        logger.warning("A keyId is null. Skipping record.");
        continue;
      }

      i = readUniqueIds(uniqueIds, resultSet, i);
      if (Arrays.contains(uniqueIds, null)) {
        if (logger.isLoggable(Level.WARNING)) {
          logger.log(
              Level.WARNING,
              "Unique ids contain null ({0}). Skipping record.",
              StringUtils.join(uniqueIds, ", "));
          continue;
        }
      }
      UniqueId uniqueId = generateUniqueId(entitySpecName, uniqueIds);

      String propId = null;
      if (!isCasePresent()) {
        if (codeSpec == null) {
          assert propIds.length == 1 : "Don't know which proposition id to assign to";
          propId = propIds[0];
        } else {
          String code = resultSet.getString(i++);
          propId = sqlCodeToPropositionId(codeSpec, code);
          if (propId == null) {
            continue;
          }
        }
      } else {
        i++;
      }

      i = extractPropertyValues(resultSet, i, propertyValues, columnTypes);

      if (isCasePresent()) {
        propId = resultSet.getString(i++);
      }

      Constant cp = new Constant(propId, uniqueId);
      for (int j = 0; j < propertySpecs.length; j++) {
        PropertySpec propertySpec = propertySpecs[j];
        cp.setProperty(propertySpec.getName(), propertyValues[j]);
      }
      cp.setSourceSystem(dsType);
      logger.log(Level.FINEST, "Created constant {0}", cp);
      results.add(keyId, cp);
      if (++count % FLUSH_SIZE == 0) {
        try {
          results.flush(this);
        } catch (IOException ex) {
          throw new QueryResultsCacheException("Flushing primitive parameters to cache failed", ex);
        }
        if (logger.isLoggable(Level.FINE)) {
          Logging.logCount(
              logger, Level.FINE, count, "Retrieved {0} record", "Retrieved {0} records");
        }
      }
    }
    try {
      results.flush(this);
    } catch (IOException ex) {
      throw new QueryResultsCacheException("Flushing primitive parameters to cache failed", ex);
    }
    if (logger.isLoggable(Level.FINE)) {
      Logging.logCount(
          logger, Level.FINE, count, "Retrieved {0} record total", "Retrieved {0} records total");
    }
  }