B/W: Add new items to the database.
[zzz-pokedex.git] / pokedex / db / tables.py
index 80c191a..633d845 100644 (file)
@@ -1,6 +1,6 @@
 # encoding: utf8
 
-from sqlalchemy import Column, ForeignKey, MetaData, Table
+from sqlalchemy import Column, ForeignKey, MetaData, PrimaryKeyConstraint, Table
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.ext.associationproxy import association_proxy
 from sqlalchemy.orm import backref, eagerload_all, relation
@@ -177,7 +177,7 @@ class EvolutionChain(TableBase):
     __tablename__ = 'evolution_chains'
     id = Column(Integer, primary_key=True, nullable=False)
     growth_rate_id = Column(Integer, ForeignKey('growth_rates.id'), nullable=False)
-    baby_trigger_item = Column(Unicode(12))
+    baby_trigger_item_id = Column(Integer, ForeignKey('items.id'), nullable=True)
 
 class EvolutionTrigger(TableBase):
     __tablename__ = 'evolution_triggers'
@@ -208,7 +208,7 @@ class Item(TableBase):
     __tablename__ = 'items'
     __singlename__ = 'item'
     id = Column(Integer, primary_key=True, nullable=False)
-    name = Column(Unicode(16), nullable=False)
+    name = Column(Unicode(20), nullable=False)
     category_id = Column(Integer, ForeignKey('item_categories.id'), nullable=False)
     cost = Column(Integer, nullable=False)
     fling_power = Column(Integer, nullable=True)
@@ -374,19 +374,19 @@ class Move(TableBase):
     __tablename__ = 'moves'
     __singlename__ = 'move'
     id = Column(Integer, primary_key=True, nullable=False)
-    name = Column(Unicode(12), nullable=False)
+    name = Column(Unicode(24), nullable=False)
     generation_id = Column(Integer, ForeignKey('generations.id'), nullable=False)
     type_id = Column(Integer, ForeignKey('types.id'), nullable=False)
-    power = Column(SmallInteger)
+    power = Column(SmallInteger, nullable=False)
     pp = Column(SmallInteger, nullable=False)
-    accuracy = Column(SmallInteger)
+    accuracy = Column(SmallInteger, nullable=True)
     target_id = Column(Integer, ForeignKey('move_targets.id'), nullable=False)
     damage_class_id = Column(Integer, ForeignKey('move_damage_classes.id'), nullable=False)
     effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=False)
     effect_chance = Column(Integer)
     contest_type_id = Column(Integer, ForeignKey('contest_types.id'), nullable=True)
     contest_effect_id = Column(Integer, ForeignKey('contest_effects.id'), nullable=True)
-    super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=False)
+    super_contest_effect_id = Column(Integer, ForeignKey('super_contest_effects.id'), nullable=True)
 
 class Nature(TableBase):
     __tablename__ = 'natures'
@@ -462,7 +462,7 @@ class Pokemon(TableBase):
     weight = Column(Integer, nullable=False)
     species = Column(Unicode(16), nullable=False)
     color_id = Column(Integer, ForeignKey('pokemon_colors.id'), nullable=False)
-    pokemon_shape_id = Column(Integer, ForeignKey('pokemon_shapes.id'), nullable=False)
+    pokemon_shape_id = Column(Integer, ForeignKey('pokemon_shapes.id'), nullable=True)
     habitat_id = Column(Integer, ForeignKey('pokemon_habitats.id'), nullable=True)
     gender_rate = Column(Integer, nullable=False)
     capture_rate = Column(Integer, nullable=False)
@@ -619,12 +619,17 @@ class PokemonItem(TableBase):
 
 class PokemonMove(TableBase):
     __tablename__ = 'pokemon_moves'
-    pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
-    version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
-    move_id = Column(Integer, ForeignKey('moves.id'), primary_key=True, nullable=False, autoincrement=False, index=True)
-    pokemon_move_method_id = Column(Integer, ForeignKey('pokemon_move_methods.id'), primary_key=True, nullable=False, autoincrement=False)
-    level = Column(Integer, primary_key=True, nullable=True, autoincrement=False, index=True)
-    order = Column(Integer, nullable=True, index=True)
+    pokemon_id = Column(Integer, ForeignKey('pokemon.id'), nullable=False, index=True)
+    version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False, index=True)
+    move_id = Column(Integer, ForeignKey('moves.id'), nullable=False, index=True)
+    pokemon_move_method_id = Column(Integer, ForeignKey('pokemon_move_methods.id'), nullable=False, index=True)
+    level = Column(Integer, nullable=True, index=True)
+    order = Column(Integer, nullable=True)
+
+    __table_args__ = (
+        PrimaryKeyConstraint('pokemon_id', 'version_group_id', 'move_id', 'pokemon_move_method_id', 'level'),
+        {},
+    )
 
 class PokemonMoveMethod(TableBase):
     __tablename__ = 'pokemon_move_methods'
@@ -759,6 +764,7 @@ EncounterSlotCondition.condition = relation(EncounterCondition,
                                             backref='slot_map')
 
 EvolutionChain.growth_rate = relation(GrowthRate, backref='evolution_chains')
+EvolutionChain.baby_trigger_item = relation(Item, backref='evolution_chains')
 
 Experience.growth_rate = relation(GrowthRate, backref='experience_table')