public Common.Signature toProto() { Common.Signature.Builder builder = Common.Signature.newBuilder(); if (null != sql) { builder.setSql(sql); } if (null != cursorFactory) { builder.setCursorFactory(cursorFactory.toProto()); } if (null != columns) { for (ColumnMetaData column : columns) { builder.addColumns(column.toProto()); } } if (null != parameters) { for (AvaticaParameter parameter : parameters) { builder.addParameters(parameter.toProto()); } } return builder.build(); }
/** * @param column * @param size * @return 长度验证 */ public boolean lengthValidator(String column, int size) { ColumnMetaData columneMetaData = columnMetaDatas.get(column); if (null == columneMetaData || size <= 0) { return false; } return columneMetaData.getColumnSize() >= size ? true : false; }
/** @param columnMetaData */ public void addColumnMetaData(ColumnMetaData columnMetaData) { if (null == columnMetaData) { return; } if (!containColumnName(columnMetaData.getName())) { names.add(columnMetaData.getName()); columnMetaDatas.put(columnMetaData.getName(), columnMetaData); } }
public int findColumn(String columnName) throws SQLException { for (int i = 0; i < columns.size(); ++i) { ColumnMetaData column = columns.get(i); if (column.getColumnName().equals(columnName)) { return i + 1; } } throw new SQLException("column '" + columnName + "' not found."); }
/** * @param columnName * @return */ public boolean isNullable(String columnName) { ColumnMetaData column = columnMetaDatas.get(columnName); if (null != column) { return column.isNullable(); } return false; }
/** * @param columnsName * @return */ public List<ColumnMetaData> intersectColumnsMetaData(List<String> columnsName) { List<ColumnMetaData> columnsMetaData = new ArrayList<ColumnMetaData>(); for (ColumnMetaData columnMetaData : this.columnsName) { if (!columnsName.contains(columnMetaData.getName())) { columnsMetaData.add(columnMetaData); } } return columnsMetaData; }
public PrimaryKey( String dbname, String tableName, String primaryKeyName, int increment, long curValue, String type, String prefix, String maxSql, String generator, Connection con) { this.dbname = dbname; this.generator = generator; dbAdapter = SQLManager.getInstance().getDBAdapter(dbname); this.tableName = tableName; this.primaryKeyName = primaryKeyName; this.increment = increment; this.curValue = curValue; JDBCPool pool = (JDBCPool) (SQLManager.getInstance().getPool(dbname)); synsequece = pool.getJDBCPoolMetadata().synsequence(); this.seqfunction = pool.getJDBCPoolMetadata().getSeqfunction(); String mode = pool.getKeygenerate(); if (mode.trim().equalsIgnoreCase("auto")) keygenerator_mode = 0; else if (mode.trim().equalsIgnoreCase("composite")) keygenerator_mode = 1; if (type != null && !type.trim().equals("")) this.type = type; if (prefix != null && !prefix.trim().equals("")) this.prefix = prefix; this.maxSql = maxSql; if (type.equals("sequence")) { ColumnMetaData cd = pool.getColumnMetaData(con, tableName, primaryKeyName); if (cd != null) { int type_ = cd.getDataType(); this.metaType = PrimaryKey.getJavaType(type_); } else { metaType = "int"; } } else if (type.equals("uuid")) { ColumnMetaData cd = pool.getColumnMetaData(con, tableName, primaryKeyName); if (cd != null) { int type_ = cd.getDataType(); this.metaType = PrimaryKey.getJavaType(type_); } else { metaType = "string"; } } else { this.metaType = type; } }
/** * Returns a string representation of the object using a prefix This can be used as part of a * facility to output a MetaData file. * * @param prefix prefix string * @param indent indent string * @return a string representation of the object. */ public String toString(String prefix, String indent) { // Field needs outputting so generate metadata StringBuilder sb = new StringBuilder(); sb.append(prefix) .append( "<version strategy=\"" + versionStrategy.toString() + "\"" + (indexed != null ? (" indexed=\"" + indexed.toString() + "\"") : "")); if (columnName != null && columnMetaData == null) { sb.append(" column=\"" + columnName + "\""); } sb.append(">\n"); // Column MetaData if (columnMetaData != null) { sb.append(columnMetaData.toString(prefix + indent, indent)); } // Add index if (indexMetaData != null) { sb.append(indexMetaData.toString(prefix + indent, indent)); } // Add extensions sb.append(super.toString(prefix + indent, indent)); sb.append(prefix).append("</version>\n"); return sb.toString(); }
public static Signature fromProto(Common.Signature protoSignature) { List<ColumnMetaData> metadata = new ArrayList<>(protoSignature.getColumnsCount()); for (Common.ColumnMetaData protoMetadata : protoSignature.getColumnsList()) { metadata.add(ColumnMetaData.fromProto(protoMetadata)); } List<AvaticaParameter> parameters = new ArrayList<>(protoSignature.getParametersCount()); for (Common.AvaticaParameter protoParam : protoSignature.getParametersList()) { parameters.add(AvaticaParameter.fromProto(protoParam)); } final Descriptor desc = protoSignature.getDescriptorForType(); String sql = null; if (ProtobufService.hasField(protoSignature, desc, Common.Signature.SQL_FIELD_NUMBER)) { sql = protoSignature.getSql(); } CursorFactory cursorFactory = null; if (ProtobufService.hasField( protoSignature, desc, Common.Signature.CURSOR_FACTORY_FIELD_NUMBER)) { cursorFactory = CursorFactory.fromProto(protoSignature.getCursorFactory()); } return Signature.create(metadata, sql, parameters, cursorFactory); }
/** * Initialisation method. This should be called AFTER using the populate method if you are going * to use populate. It creates the internal convenience arrays etc needed for normal operation. */ public void initialise(ClassLoaderResolver clr, MetaDataManager mmgr) { if (hasExtension("field-name")) { // User has provided extension "field-name" meaning that we store the version in the column // for the specified field (like in JPA) String val = getValueForExtension("field-name"); if (!StringUtils.isWhitespace(val)) { this.fieldName = val; this.columnName = null; } } if (fieldName == null) { // Cater for user specifying column name, or column if (columnMetaData == null && columnName != null) { columnMetaData = new ColumnMetaData(); columnMetaData.setName(columnName); columnMetaData.parent = this; } // Interpret the "indexed" value to create our IndexMetaData where it wasn't specified that // way if (indexMetaData == null && columnMetaData != null && indexed != null && indexed != IndexedValue.FALSE) { indexMetaData = new IndexMetaData(); indexMetaData.setUnique(indexed == IndexedValue.UNIQUE); indexMetaData.addColumn(columnMetaData.getName()); indexMetaData.parent = this; } } else { if (getParent() instanceof AbstractClassMetaData) { AbstractMemberMetaData vermmd = ((AbstractClassMetaData) getParent()).getMetaDataForMember(fieldName); if (vermmd != null && java.util.Date.class.isAssignableFrom(vermmd.getType())) { NucleusLogger.GENERAL.debug( "Setting version-strategy of field " + vermmd.getFullFieldName() + " to DATE_TIME since is Date-based"); versionStrategy = VersionStrategy.DATE_TIME; } } } }
/** * 构造函数,构建表的基本信息 * * @param Connection con 由biaoping.yin添加 * @param dbname 表所属的数据库链接池 * @param tableName 表的名称 * @param primaryKeyName 表的主键名称 * @param increment 表主键自增值 * @param curValue 表主键当前值 */ public PrimaryKey( String dbname, String tableName, String primaryKeyName, Object customKey, Connection con) { this.dbname = dbname; dbAdapter = SQLManager.getInstance().getDBAdapter(dbname); this.tableName = tableName; this.primaryKeyName = primaryKeyName; JDBCPool pool = (JDBCPool) (SQLManager.getInstance().getPool(dbname)); synsequece = pool.getJDBCPoolMetadata().synsequence(); this.seqfunction = pool.getJDBCPoolMetadata().getSeqfunction(); try { TableMetaData table = pool.getTableMetaData(con, tableName); if (table != null) { if (primaryKeyName != null) { ColumnMetaData cd = pool.getColumnMetaData(con, tableName, primaryKeyName); int type_ = cd.getDataType(); this.setType_(type_); } else { Set keys = table.getPrimaryKeys(); if (keys != null) { Iterator keyitrs = keys.iterator(); if (keyitrs.hasNext()) { PrimaryKeyMetaData key = (PrimaryKeyMetaData) keyitrs.next(); this.primaryKeyName = key.getColumnName().toLowerCase(); this.setType_(key.getColumn().getDataType()); } } } } } catch (Exception e) { e.printStackTrace(); } String mode = pool.getKeygenerate(); if (mode.trim().equalsIgnoreCase("auto")) keygenerator_mode = 0; else if (mode.trim().equalsIgnoreCase("composite")) keygenerator_mode = 1; this.customKey = customKey; }