From a539702dc4d49dfcaafd31fbab1f5f7d35ff1e85 Mon Sep 17 00:00:00 2001 From: Rogiel Date: Mon, 26 Dec 2011 14:33:42 -0200 Subject: [PATCH] Implements OrientDB artificial primary key generations Generated primary keys use the document ReferenceID in order to provide the generated ID. Differently from SQL based databases, IDs generated by this system are 0 indexed --- .../orientdb/AbstractOrientDatabaseService.java | 17 ++++++++++++++--- .../database/mapper/ChatMessageMapper.java | 2 +- .../game/world/CachedWorldIDService.java | 1 - 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java b/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java index b12571ea4..7f434b0dd 100644 --- a/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java +++ b/l2jserver2-common/src/main/java/com/l2jserver/service/database/orientdb/AbstractOrientDatabaseService.java @@ -383,9 +383,15 @@ public abstract class AbstractOrientDatabaseService extends AbstractService property.setType(OType.getTypeByClass(path.getType())); } final boolean nullable = QPathUtils.isNullable(path); - if (property.isNotNull() != !nullable) + final boolean autoIncrement = QPathUtils + .isAutoIncrementable(path); + if (property.isNotNull() && autoIncrement) + property.setNotNull(false); + else if (property.isNotNull() != !nullable && !autoIncrement) property.setNotNull(!nullable); - if (property.isMandatory() != !nullable) + if (property.isMandatory() && autoIncrement) + property.setMandatory(false); + else if (property.isMandatory() != !nullable && !autoIncrement) property.setMandatory(!nullable); } for (final ForeignKey fk : table.getForeignKeys()) { @@ -578,8 +584,13 @@ public abstract class AbstractOrientDatabaseService extends AbstractService if (primaryKey != null && object instanceof Model) { final Long rawID = row.getDocument().getIdentity() .getClusterPosition(); + row.getDocument() + .field(primaryKey.getMetadata().getExpression() + .toString(), rawID.intValue()); + row.getDocument().save(); // save, again! + final ID id = mapper.getPrimaryKeyMapper() - .createID((RI) rawID); + .createID((RI) (Integer) rawID.intValue()); ((Model>) object).setID(id); } rows++; diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/mapper/ChatMessageMapper.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/mapper/ChatMessageMapper.java index e333f8757..d427b7f7b 100644 --- a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/mapper/ChatMessageMapper.java +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/database/mapper/ChatMessageMapper.java @@ -37,7 +37,7 @@ public class ChatMessageMapper extends private final PrimaryKeyMapper idMapper = new PrimaryKeyMapper() { @Override public ChatMessageID createID(Integer raw) { - return idMapper.createID(raw); + return idProvider.resolveID(raw); } }; diff --git a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/world/CachedWorldIDService.java b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/world/CachedWorldIDService.java index 3a8608bf4..cc36edfd7 100644 --- a/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/world/CachedWorldIDService.java +++ b/l2jserver2-gameserver/src/main/java/com/l2jserver/service/game/world/CachedWorldIDService.java @@ -122,7 +122,6 @@ public class CachedWorldIDService extends AbstractService implements load(itemDao.selectIDs()); load(npcDao.selectIDs()); - log.info("{} IDs loaded from database"); loaded = true; }