4.0 to 5.0 Custom Field Migration
The scripts for Custom Field data migration. Note that there are database specific and version specific differences.
Custom Field Module - data migration of BLC_INDEX_FIELD (All modules)
-- Add an Index Field record for each Field that has a "search type"
INSERT INTO BLC_INDEX_FIELD
(
INDEX_FIELD_ID,
SEARCHABLE,
FIELD_ID
)
SELECT FIELD_ID,
SEARCHABLE,
FIELD_ID
FROM BLC_FIELD;
Data migration of BLC_INDEX_FIELD_TYPE and BLC_FIELD (MySQL, All modules)
-- Migrate Field Search Types to Index Field Type (mysql only)
INSERT INTO BLC_INDEX_FIELD_TYPE
(
INDEX_FIELD_TYPE_ID,
FIELD_TYPE,
INDEX_FIELD_ID
)
SELECT @rownum := @rownum + 1 AS id,
SEARCHABLE_FIELD_TYPE,
FIELD_ID
FROM BLC_FIELD_SEARCH_TYPES,
(SELECT @rownum := 0) r;
INSERT INTO BLC_INDEX_FIELD_TYPE
(
INDEX_FIELD_TYPE_ID,
FIELD_TYPE,
INDEX_FIELD_ID
)
SELECT @rownum := @rownum + 1 AS id,
FACET_FIELD_TYPE,
FIELD_ID
FROM BLC_FIELD,
(SELECT @rownum := (select max(INDEX_FIELD_TYPE_ID) from BLC_INDEX_FIELD_TYPE)) r
WHERE FACET_FIELD_TYPE is not null and not exists (select * from BLC_INDEX_FIELD_TYPE where FIELD_TYPE = FACET_FIELD_TYPE and INDEX_FIELD_ID = FIELD_ID);
Data migration of BLC_INDEX_FIELD_TYPE (SQL Server Only, All modules)
-- Migrate Field Search Types to Index Field Type (mysql only)
SELECT null as ID,
SEARCHABLE_FIELD_TYPE as FIELD_TYPE,
FIELD_ID as INDEX_FIELD_ID
into BLC_TMP_INDEX_FIELD_TYPE
FROM BLC_FIELD_SEARCH_TYPES;
GO
INSERT INTO BLC_TMP_INDEX_FIELD_TYPE
SELECT NULL,
FACET_FIELD_TYPE,
FIELD_ID
FROM BLC_FIELD
WHERE FACET_FIELD_TYPE is not null and not exists (select * from BLC_TMP_INDEX_FIELD_TYPE where FIELD_TYPE = FACET_FIELD_TYPE and INDEX_FIELD_ID = FIELD_ID);
GO
DECLARE @id INT
SET @id = 0
UPDATE BLC_TMP_INDEX_FIELD_TYPE
SET @id = ID = @id + 1
GO
INSERT INTO BLC_INDEX_FIELD_TYPE
(
INDEX_FIELD_TYPE_ID,
FIELD_TYPE,
INDEX_FIELD_ID
)
SELECT * from BLC_TMP_INDEX_FIELD_TYPE
GO
DROP TABLE BLC_TMP_INDEX_FIELD_TYPE
GO
Data migration of BLC_INDEX_FIELD_TYPE and BLC_FIELD (Oracle, All modules)
-- Migrate Field Search Types to Index Field Type (oracle only)
CREATE SEQUENCE idx_field_type;
INSERT INTO BLC_INDEX_FIELD_TYPE
(
INDEX_FIELD_TYPE_ID,
FIELD_TYPE,
INDEX_FIELD_ID
)
SELECT idx_field_type.nextval,
SEARCHABLE_FIELD_TYPE,
FIELD_ID
FROM BLC_FIELD_SEARCH_TYPES;
INSERT INTO BLC_INDEX_FIELD_TYPE
(
INDEX_FIELD_TYPE_ID,
FIELD_TYPE,
INDEX_FIELD_ID
)
SELECT idx_field_type.nextval,
FACET_FIELD_TYPE,
FIELD_ID
FROM BLC_FIELD
WHERE FACET_FIELD_TYPE is not null and not exists (select * from BLC_INDEX_FIELD_TYPE where FIELD_TYPE = FACET_FIELD_TYPE and INDEX_FIELD_ID = FIELD_ID);
DROP SEQUENCE idx_field_type;
Data migration for BLC_SEARCH_FACET (MySQL, All modules)
UPDATE BLC_SEARCH_FACET facet
join BLC_FIELD field on facet.FIELD_ID = field.FIELD_ID
join BLC_INDEX_FIELD_TYPE type on field.FIELD_ID = type.INDEX_FIELD_ID and field.FACET_FIELD_TYPE = type.FIELD_TYPE
SET facet.INDEX_FIELD_TYPE_ID = type.INDEX_FIELD_TYPE_ID;
Data migration for BLC_SEARCH_FACET (SQL Server, All modules)
UPDATE facet
SET facet.INDEX_FIELD_TYPE_ID = type.INDEX_FIELD_TYPE_ID
from BLC_SEARCH_FACET as facet
join BLC_FIELD as field on facet.FIELD_ID = field.FIELD_ID
join BLC_INDEX_FIELD_TYPE as type on field.FIELD_ID = type.INDEX_FIELD_ID and field.FACET_FIELD_TYPE = type.FIELD_TYPE;
Data migration for BLC_SEARCH_FACET (Oracle, All modules)
merge into BLC_SEARCH_FACET facet
using (select blcField.FIELD_ID as FIELD_ID, idxFieldType.INDEX_FIELD_TYPE_ID
from BLC_INDEX_FIELD_TYPE idxFieldType
join BLC_FIELD blcField on blcField.FIELD_ID = idxFieldType.INDEX_FIELD_ID
join BLC_SEARCH_FACET facet on facet.FIELD_ID = blcField.FIELD_ID
where blcField.FACET_FIELD_TYPE = idxFieldType.FIELD_TYPE) sq
on (facet.FIELD_ID = sq.FIELD_ID)
when matched then update set facet.INDEX_FIELD_TYPE_ID = sq.INDEX_FIELD_TYPE_ID
Data migration of BLC_CUSTOM_FIELD to BLC_FIELD (Multi-Tenant)
-- Add a Field record for each Custom Field
-- Field_Id defaults to the opposite of the sum of the Custom_Field_Id and 100
-- Field_Id defaults to (-1 * (100 + Custom_Field_id))
INSERT INTO BLC_FIELD
(
FIELD_ID,
ABBREVIATION,
ENTITY_TYPE,
FRIENDLY_NAME,
PROPERTY_NAME,
SEARCHABLE,
SITE_DISC
)
SELECT (-1 * (100 + CUSTOM_FIELD_ID)),
ATTR_NAME,
CUSTOM_FIELD_TARGET,
FRIENDLY_NAME,
ATTR_NAME,
SEARCHABLE,
SITE_DISC
FROM BLC_CUSTOM_FIELD;
Data migration of BLC_CUSTOM_FIELD to BLC_FIELD (Enterprise-only)
-- Add a Field record for each Custom Field
-- Field_Id defaults to the opposite of the sum of the Custom_Field_Id and 100
-- Field_Id defaults to (-1 * (100 + Custom_Field_id))
INSERT INTO BLC_FIELD
(
FIELD_ID,
ABBREVIATION,
ENTITY_TYPE,
FRIENDLY_NAME,
PROPERTY_NAME,
SEARCHABLE
)
SELECT (-1 * (100 + CUSTOM_FIELD_ID)),
ATTR_NAME,
CUSTOM_FIELD_TARGET,
FRIENDLY_NAME,
ATTR_NAME,
SEARCHABLE
FROM BLC_CUSTOM_FIELD;
Set FIELD_ID in BLC_CUSTOM_FIELD (all)
-- Add Field Ids to Custom Field
UPDATE BLC_CUSTOM_FIELD SET FIELD_ID = -1 * (100 + CUSTOM_FIELD_ID);