array( 'vote_id' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE), 'content_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'), 'content_id' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0), 'value' => array('type' => 'float', 'not null' => TRUE, 'default' => 0), 'value_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'percent'), 'tag' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'vote'), 'uid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0), 'timestamp' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0), 'vote_source' => array('type' => 'varchar', 'length' => 255), ), 'primary key' => array('vote_id'), 'indexes' => array( 'content_uid' => array('content_type', 'content_id', 'uid'), 'content_uid_2' => array('content_type', 'uid'), 'content_source' => array('content_type', 'content_id', 'vote_source'), 'content_value_tag' => array('content_type', 'content_id', 'value_type', 'tag'), ), ); $schema['votingapi_cache'] = array( 'fields' => array( 'vote_cache_id' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE), 'content_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'node'), 'content_id' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0), 'value' => array('type' => 'float', 'not null' => TRUE, 'default' => 0), 'value_type' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'percent'), 'tag' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => 'vote'), 'function' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE, 'default' => ''), 'timestamp' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0), ), 'primary key' => array('vote_cache_id'), 'indexes' => array( 'content' => array('content_type', 'content_id'), 'content_function' => array('content_type', 'content_id', 'function'), 'content_tag_func' => array('content_type', 'content_id', 'tag', 'function'), 'content_vtype_tag' => array('content_type', 'content_id', 'value_type', 'tag'), 'content_vtype_tag_func' => array('content_type', 'content_id', 'value_type', 'tag', 'function'), ), ); return $schema; } function votingapi_install() { drupal_install_schema('votingapi'); } function votingapi_uninstall() { drupal_uninstall_schema('votingapi'); } /** * UTF8 update */ function votingapi_update_1() { return _system_update_utf8(array('votingapi_vote', 'votingapi_cache')); } /** * Value fields changed to signed floats. */ function votingapi_update_2() { $ret = array(); db_drop_primary_key($ret, 'votingapi_cache'); db_drop_primary_key($ret, 'votingapi_vote'); db_change_field($ret, votingapi_cache, value, value, array('type' => 'float', 'default' => NULL), array('primary_key' => array('vote_cache_id'))); db_change_field($ret, votingapi_vote, value, value, array('type' => 'float', 'default' => NULL), array('primary_key' => array('vote_id'))); return $ret; } /** * Value fields changed to signed floats. */ function votingapi_update_3() { $ret = array(); switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': $ret[] = update_sql("UPDATE {votingapi_cache} SET value_type = 'percent' WHERE value_type = '1'"); $ret[] = update_sql("UPDATE {votingapi_cache} SET value_type = 'points' WHERE value_type = '2'"); $ret[] = update_sql("UPDATE {votingapi_cache} SET value_type = 'option' WHERE value_type = '3'"); $ret[] = update_sql("UPDATE {votingapi_vote} SET value_type = 'percent' WHERE value_type = '1'"); $ret[] = update_sql("UPDATE {votingapi_vote} SET value_type = 'points' WHERE value_type = '2'"); $ret[] = update_sql("UPDATE {votingapi_vote} SET value_type = 'option' WHERE value_type = '3'"); break; } return $ret; } /** * Initial work to roll Voting Actions functionality into Voting API. */ function votingapi_update_4() { $ret = array(); $name = 'votingapi_action_set'; $table_action_step = array( 'fields' => array( 'vasid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE), 'parent' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE), 'required' => array('type' => 'int', 'not null' => TRUE, 'default' => 0), 'mask' => array('type' => 'varchar', 'default' => 'AND'), 'content_type' => array('type' => 'varchar', 'length' => 20, 'default' => NULL), 'name' => array('type' => 'varchar', 'length' => 128, 'default' => NULL), 'enabled' => array('type' => 'int', 'default' => 1), 'source' => array('type' => 'varchar', 'length' => 65, 'default' => NULL), 'weight' => array('type' => 'int', 'length' => 10, 'not null' => TRUE, 'default' => 0), ), 'primary key' => array('vasid'), ); db_create_table($ret, $name, $table_action_set); $name = 'votingapi_action_condition'; $table_action_condition = array( 'fields' => array( 'vacid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE), 'vasid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE), 'weight' => array('type' => 'int', 'length' => 10, 'not null' => TRUE, 'default' => 0), 'value' => array('type' => 'varchar', 'length' => 255), 'handler' => array('type' => 'varchar', 'length' => 255), ), 'primary key' => array('vacid'), ); db_create_table($ret, $name, $table_action_condition); $name = 'votingapi_action'; $table_votingapi_action = array( 'fields' => array( 'vasid' => array('type' => 'int', 'length' => 10, 'unsigned' => TRUE, 'not null' => TRUE), 'aid' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => 0), ), ); db_create_table($ret, $name, $table_votingapi_action); return $ret; } /** * Fixed index definition, corrected table prefixes. */ function votingapi_update_5() { $ret = array(); db_add_index($ret, '{votingapi_vote}', 'content', array('content_type', 'content_id')); db_add_index($ret, '{votingapi_cache}', 'content', array('content_type', 'content_id')); db_drop_index($ret, '{votingapi_vote}', 'content_type'); db_drop_index($ret, '{votingapi_vote}', 'content_id'); db_drop_index($ret, '{votingapi_cache}', 'content_type'); db_drop_index($ret, '{votingapi_cache}', 'content_id'); db_rename_table($ret, 'votingapi_action_condition', '{votingapi_action_condition}'); db_rename_table($ret, 'votingapi_action', '{votingapi_action}'); switch ($GLOBALS['db_type']) { case 'mysql': case 'mysqli': $ret[] = update_sql("UPDATE {sequences} SET name = '{votingapi_cache}' WHERE name = 'votingapi_cache';"); $ret[] = update_sql("UPDATE {sequences} SET name = '{votingapi_vote}' WHERE name = 'votingapi_vote';"); break; } return $ret; } function votingapi_update_6() { $ret = array(); db_add_column($ret, 'votingapi_action_condition', 'name', 'varchar', array('length' => 128)); db_add_column($ret, 'votingapi_action_set', 'name', 'description', array('length' => 255, 'not null' => TRUE)); db_change_column($ret, 'votingapi_action_condition', 'value', 'data', 'varchar', array('length' => 255)); return $ret; } function votingapi_update_7() { // There are quite a few changes. Let's just take the easy way and nuke this puppy. // Nothing has been using the tables up to this point, anyhow. db_drop_table($ret, 'votingapi_action_set'); db_drop_table($ret, 'votingapi_action_condition'); db_drop_table($ret, 'votingapi_action'); $name = 'votingapi_action_set'; $table_votingapi_action_set = array( 'fields' => array( 'name' => array('type' => 'varchar', 'length' => 64, 'not null' => TRUE), 'parent_name' => array('type' => 'varchar', 'default' => NULL), 'content_type' => array('type' => 'varchar', 'length' => 20, 'default' => NULL), 'source' => array('type' => 'varchar', 'length' => 64, 'default' => NULL), 'description' => array('type' => 'varchar', 'length' => 255, 'default' => NULL), 'required' => array('type' => 'int', 'length' => 8, 'not null' => TRUE, 'default' => 0), 'criteria_mask' => array('type' => 'varchar', 'length' => 8, 'default' => 'AND'), 'weight' => array('type' => 'int', 'length' => 10, 'not null' => TRUE, 'default' => 0), ), 'primary_key' => array('name'), ); db_create_table($ret, $name, $table_votingapi_action_set); $name = 'votingapi_action_condition'; $table_votingapi_action_condition = array( 'fields' => array( 'name' => array('type' => 'varchar', 'length' => 64, 'length' => 64), 'parent_name' => array('type' => 'varchar', 'default' => NULL), 'description' => array('type' => 'varchar', 'length' => 255, 'default' => NULL), 'data' => array('type' => 'varchar', 'length' => 255), 'handler' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE), ), 'primary key' => array('name'), ); db_create_table($ret, $name, $table_votingapi_action_condition); $name = 'votingapi_action'; $table_votingapi_action = array( 'fields' => array( 'parent_name' => array('type' => 'varchar', 'length' => 64, 'length' => 64), 'aid' => array('type' => 'varchar', 'length' => 255, 'not null' => 255), ), ); db_create_table($ret, $name, $table_votingapi_action); return $ret; } function votingapi_update_8() { // whoops. mis-named column. $ret = array(); db_change_column($ret, 'votingapi_action_set', 'criteria_mask', 'condition_mask', 'varchar', array('length' => 8, 'default' => 'AND')); return $ret; } function votingapi_update_9() { $ret = array(); db_add_column($ret, 'votingapi_cache', 'timestamp', 'int', array('length' => 11, 'default' => NULL)); $ret[] = update_sql("UPDATE {votingapi_cache} SET timestamp = " . time() . " WHERE timestamp IS NULL;"); return $ret; } function votingapi_update_6100() { $ret = array(); // Convert vote_id and vote_cache_id columns to auto increment. db_drop_primary_key($ret, 'votingapi_cache'); db_change_field($ret, 'votingapi_cache', 'vote_cache_id', 'vote_cache_id', array('type' => 'serial', 'not null' => TRUE), array('primary key' => array('vote_cache_id'))); db_drop_primary_key($ret, 'votingapi_vote'); db_change_field($ret, 'votingapi_vote', 'vote_id', 'vote_id', array('type' => 'serial', 'not null' => TRUE), array('primary key' => array('vote_id'))); // Rename the 'hostname' field to 'vote_source' for more flexibility. db_change_field($ret, 'votingapi_vote', 'hostname', 'vote_source', array('type' => 'varchar', 'length' => 255)); $indexes = array( 'content_uid' => array('content_type', 'content_id', 'uid'), 'content_source' => array('content_type', 'content_id', 'vote_source'), 'content_vtype' => array('content_type', 'content_id', 'value_type'), 'content_value_tag' => array('content_type', 'content_id', 'value_type', 'tag'), ); foreach ($indexes as $name => $fields) { db_add_index($ret, 'votingapi_vote', $name, $fields); } $indexes = array( 'content_function' => array('content_type', 'content_id', 'function'), 'content_tag_func' => array('content_type', 'content_id', 'tag', 'function'), 'content_vtype_tag' => array('content_type', 'content_id', 'value_type', 'tag'), 'content_vtype_tag_func' => array('content_type', 'content_id', 'value_type', 'tag', 'function'), ); foreach ($indexes as $name => $fields) { db_add_index($ret, 'votingapi_cache', $name, $fields); } // Yes, we loves us the SchemaAPI. return $ret; } // More index tweaking for votingapi_vote table. // It's not really kosher, but this update was *altered* after the release of version 2.0 // to correct a typo. Better to fix it in-place than leave an actual bug. function votingapi_update_6101() { $ret = array(); db_drop_index($ret, 'votingapi_vote', 'content'); db_drop_index($ret, 'votingapi_vote', 'content_vtype'); db_add_index($ret, 'votingapi_vote', 'content_uid_2', array('content_type', 'uid')); return $ret; }