Difference between revisions of "Adding a Field to a Live Repository"

From EPrints Documentation
Jump to: navigation, search
 
Line 7: Line 7:
 
Adding fields of type "name" is beyond the scope of these instructions.
 
Adding fields of type "name" is beyond the scope of these instructions.
  
[[menu]]
+
== Recipe ==
  
!Recipe
+
=== Step 1 - Shut down apache ===
 
 
!!Step 1 - Shut down apache
 
 
Shut down the web server. You don't want people using it while you make this change.
 
Shut down the web server. You don't want people using it while you make this change.
  
!!Step 2 - Add configuration
+
=== Step 2 - Add configuration ===
 
Add the configuration for this field to MetadataFieldsConfig.pm - take note of which field you add this new field after. (from now on I'll refer to the previous field as ''prevfield''.  
 
Add the configuration for this field to MetadataFieldsConfig.pm - take note of which field you add this new field after. (from now on I'll refer to the previous field as ''prevfield''.  
  
!!Step 3 - Add fields to database
+
=== Step 3 - Add fields to database ===
  
 
Find out the SQL type of the field you are adding.  
 
Find out the SQL type of the field you are adding.  
Line 40: Line 38:
 
* Replace ''prevfield'' with the name of the (non-multiple) field proceeding the field you are adding. If prevfield is a multiple then use the first non-multiple field proceeding your new field. (not used for multiple fields)
 
* Replace ''prevfield'' with the name of the (non-multiple) field proceeding the field you are adding. If prevfield is a multiple then use the first non-multiple field proceeding your new field. (not used for multiple fields)
  
 +
''Now only do step 3a or 3b depending if this field is multiple or not''
  
!!!Step 3a - Adding a normal field
+
==== Step 3a - Adding a normal field ====
  
 
In the database (log into CommandLineMySQL) do the following:
 
In the database (log into CommandLineMySQL) do the following:
Line 54: Line 53:
 
  ALTER TABLE deletion ADD ''newfieldname'' ''type'' default NULL AFTER ''prevfield'';
 
  ALTER TABLE deletion ADD ''newfieldname'' ''type'' default NULL AFTER ''prevfield'';
  
!!!Step 3b - Adding a "multiple" field
+
==== Step 3b - Adding a "multiple" field ====
  
 
Multiple fields need their own table, so the syntax is different.
 
Multiple fields need their own table, so the syntax is different.
Line 72: Line 71:
 
     ''newfieldname'' ''type'' default NULL, KEY eprintid (eprintid), KEY pos (pos) );   
 
     ''newfieldname'' ''type'' default NULL, KEY eprintid (eprintid), KEY pos (pos) );   
  
!!Step 4 - Modify the ordervalues tables
+
=== Step 4 - Modify the ordervalues tables ===
  
 
The ordervalues table is used to store a "dumbed down" version of the value in your field used for sorting, but never rendered.
 
The ordervalues table is used to store a "dumbed down" version of the value in your field used for sorting, but never rendered.
Line 87: Line 86:
 
  ALTER TABLE deletion__ordervalues_en ADD ''fieldname'' TEXT AFTER ''prevfield'';
 
  ALTER TABLE deletion__ordervalues_en ADD ''fieldname'' TEXT AFTER ''prevfield'';
  
!!Step 5 - Checking it works...
+
=== Step 5 - Checking it works... ===
  
 
It should all be OK at this point, but it's worth checking. I suggest running generate_views on the archive to make sure it all works OK.
 
It should all be OK at this point, but it's worth checking. I suggest running generate_views on the archive to make sure it all works OK.
  
!!Step 6 - Finishing up
+
=== Step 6 - Finishing up ===
  
 
Add the config to metadata-types.xml and phrases.xml - see AddingFields
 
Add the config to metadata-types.xml and phrases.xml - see AddingFields
  
!!Step 7 - Restart apache
+
=== Step 7 - Restart apache ===
  
 
Everything should now be OK. restart the webserver
 
Everything should now be OK. restart the webserver
Line 101: Line 100:
 
----
 
----
  
!Examples
+
== Examples ==
  
  
!! Normal set field example
+
=== Normal set field example ===
 
To add a field of type 'set' to eprints. We add this to ArchveMetadataFieldsConfig.pm
 
To add a field of type 'set' to eprints. We add this to ArchveMetadataFieldsConfig.pm
  

Revision as of 16:05, 1 June 2006

To add a field to a live eprints archive you have to modify the SQL tables.

Before you start this you may wish to BackupTheDatabase.

This assumes you are adding a field to the "eprint" fields, not the "user" fields. If you are changing "user" then anywhere we have 4 actions, one for each of buffer, deletion, archive and inbox, you instead need a single action for "users".

Adding fields of type "name" is beyond the scope of these instructions.

Recipe

Step 1 - Shut down apache

Shut down the web server. You don't want people using it while you make this change.

Step 2 - Add configuration

Add the configuration for this field to MetadataFieldsConfig.pm - take note of which field you add this new field after. (from now on I'll refer to the previous field as prevfield.

Step 3 - Add fields to database

Find out the SQL type of the field you are adding.

boolean

SET('TRUE','FALSE')

date

DATE

year, int

INTEGER

longtext

TEXT

subject,set,url,email,pagerange,text

VARCHAR(255)

Note that if the field is type multiple then this step is different.

For both steps the following replacements must be applied to the MySQL code given:

  • Replace type with the SQL type appropriate to the field you are adding.
  • Replace newfieldname with the name of the field you're adding
  • Replace prevfield with the name of the (non-multiple) field proceeding the field you are adding. If prevfield is a multiple then use the first non-multiple field proceeding your new field. (not used for multiple fields)

Now only do step 3a or 3b depending if this field is multiple or not

Step 3a - Adding a normal field

In the database (log into CommandLineMySQL) do the following:


If this is confusing see the example at the end of the page.


ALTER TABLE archive ADD newfieldname type default NULL AFTER prevfield;
ALTER TABLE buffer ADD newfieldname type default NULL AFTER prevfield;
ALTER TABLE inbox ADD newfieldname type default NULL AFTER prevfield;
ALTER TABLE deletion ADD newfieldname type default NULL AFTER prevfield;

Step 3b - Adding a "multiple" field

Multiple fields need their own table, so the syntax is different.

Please note that these commands have been split over multiple lines for readability.

CREATE TABLE archive_newfieldname ( eprintid INT NOT NULL, pos INT, 
   newfieldname type default NULL, KEY eprintid (eprintid), KEY pos (pos) );  
CREATE TABLE buffer_newfieldname ( eprintid INT NOT NULL, pos INT, 
   newfieldname type default NULL, KEY eprintid (eprintid), KEY pos (pos) ); 
CREATE TABLE inbox_newfieldname ( eprintid INT NOT NULL, pos INT, 
   newfieldname type default NULL, KEY eprintid (eprintid), KEY pos (pos) );  
CREATE TABLE deletion_newfieldname ( eprintid INT NOT NULL, pos INT, 
   newfieldname type default NULL, KEY eprintid (eprintid), KEY pos (pos) );  

Step 4 - Modify the ordervalues tables

The ordervalues table is used to store a "dumbed down" version of the value in your field used for sorting, but never rendered.

The same replacement values apply as for step 3 with one difference. The prevfield is the previous field in ArchiveMetadataFieldsConfig.pm even if it is a multiple field.

Notes:

  • there are two underline characters before "ordervalues".
  • this assumes you are not running a multilanguage or non-english archive. If you are then repeat the 4 commands below and replace 'en' with each of your archive's languages in turn.
ALTER TABLE archive__ordervalues_en ADD fieldname TEXT AFTER prevfield;
ALTER TABLE buffer__ordervalues_en ADD fieldname TEXT AFTER prevfield;
ALTER TABLE inbox__ordervalues_en ADD fieldname TEXT AFTER prevfield;
ALTER TABLE deletion__ordervalues_en ADD fieldname TEXT AFTER prevfield;

Step 5 - Checking it works...

It should all be OK at this point, but it's worth checking. I suggest running generate_views on the archive to make sure it all works OK.

Step 6 - Finishing up

Add the config to metadata-types.xml and phrases.xml - see AddingFields

Step 7 - Restart apache

Everything should now be OK. restart the webserver


Examples

Normal set field example

To add a field of type 'set' to eprints. We add this to ArchveMetadataFieldsConfig.pm

{ name => "foo", type => "set", input_rows => 1,
       options => [ "yesod", "hod", "chesed" ] },

The previous field is a (non-multiple) text field called 'bar')

then run the following SQL statements:

ALTER TABLE archive ADD foo VARCHAR(255) default NULL AFTER bar;
ALTER TABLE buffer ADD foo VARCHAR(255) default NULL AFTER bar;
ALTER TABLE inbox ADD foo VARCHAR(255) default NULL AFTER bar;
ALTER TABLE deletion ADD foo VARCHAR(255) default NULL AFTER bar;
ALTER TABLE archive__ordervalues_en ADD foo TEXT AFTER bar;
ALTER TABLE buffer__ordervalues_en ADD foo TEXT AFTER bar;
ALTER TABLE inbox__ordervalues_en ADD foo TEXT AFTER bar;
ALTER TABLE deletion__ordervalues_en ADD foo TEXT AFTER bar;