Writer Mode
Many writers that do not yet support the Feature Operation specification share a Writer Mode specification, which determines how features will be written into the destination table.
Note: See specific format documentation for Feature Operation or Writer Mode details.
The writer mode can be specified at three unique levels:
- Writer
- Table
- Feature
Writer Level
At the writer level, possible values are:
- Insert – Implies insert only; can be overridden only by table-level modes, not feature-level modes.
- Update – Update table, but can be overridden by table- and feature-level modes.
- Delete – Delete from table, but can be overridden by table- and feature-level modes.
Table Level
At the table level, possible values are:
-
Inherit From Writer – Inherits the writer-level writer mode
-
Insert
-
Update
-
Delete
Feature Level
At the feature level, the writer mode can be set by an attribute named fme_db_operation. Possible values for this attribute are:
-
Insert
-
Update
-
Upsert
-
Delete
The value of fme_db_operation will be processed according to the steps below.
Note: The processing steps listed below depend on a format's available Feature Operation options.
- If the value is null, empty, or missing, it will be treated as an Insert.
- The value will next be matched to Insert, Update, Upsert, Put, and Delete, case-insensitively.
- If there is no match, the feature will be rejected.
- If there is a match, the matched feature operation will be performed on the feature.
Note about earlier FME versions: To use fme_db_operation, you must set Feature Operation to this option. In previous versions of FME, you could set fme_db_operation when the destination feature type was set to Insert, Update, Upsert, or Delete. Doing this now will cause feature rejection.
Notes
-
Updates performed on rows that DO NOT EXIST are NOT turned into inserts. The user is warned and the feature is rejected.
-
Inserts performed on rows that EXIST are NOT turned into updates. FME will still attempt to perform the insert: if it is not prevented by a unique index, it will insert a duplicate row; if it is prevented by a unique index, the feature will be rejected, or translation will fail, depending on the writer.
-
Updates are not limited to one row per feature. It is possible to update the entire table with one feature.
-
Geometry can also be updated using update mode. The geometry on the update feature will replace the geometry in all of the matched rows, with one exception. If a feature has no geometry, the destination geometry column will either be replaced with a null value, or not be updated, depending on the writer.
-
Although a single query feature may cause more than one feature to be edited, the update/delete feature is restricted to changing only those features of the same feature type. This means that we cannot have an update feature with a feature type of "provinces" updating features of feature type "cities". In general, a feature type in a database format corresponds to a table; however, it may also correspond to a view.