Potlatch 1/Remote calls/putway SQL
< Potlatch 1 | Remote calls(Redirected from Potlatch/Remote calls/putway SQL)
Jump to navigation
Jump to search
One of the most complex parts of the code within amf_controller.rb is the set of SQL statements (and supporting code) to write a way to the database ('putway'). 'deleteway', to delete a way, works similarly.
Here is how it works. 'Stage' numbers refer to comments in the code.
Stage 3: read original way into memory
- If it's an existing way (i.e. way id>0):
- Read the way's segments and nodes from the database (using the same query as 'getway')
- Record the start/end nodes for each segment in a hash
- Record x, y, tags for each node in further hashes
- If we're writing a reverted/undeleted way, also record visible for each node
- If it's a new way (way id<0)
- Create a new way in the database:
- Insert new row into meta_ways
- Insert new row into current_ways
- Get its ID
- Create a new way in the database:
Stage 4: get version
- Get version number by inserting new row into ways
Stage 5: compare new nodes against old
For each point in the array of points:
- Update bounding box
- If it's a new node (i.e. id<0) and not already created:
- Create a new node in the db with these x/y/tags:
- Insert new row into nodes
- Insert new row into current_nodes
- Record new id in renumberednodes so we can send it back to client
- Create a new node in the db with these x/y/tags:
- Else if it already existed in this way:
- Update if x, y or tags have changed:
- Insert new row into nodes
- Update current_nodes
- Update if x, y or tags have changed:
- Otherwise ignore
Stage 6a: delete any nodes not in modified way
- Create temporary table containing all nodes that are:
- in the previous version of this way
- not in the new version of this way
- not in any other way
- Delete each node in this table that isn't in the current way:
- Insert new rows into nodes
- Update current_nodes
- Remove from any relations
- Drop temporary table
Stage 6b: insert new version of route into way_nodes
- Delete old version from current_way_nodes
- Insert rows into way_nodes
- Insert rows into current_way_nodes
Stage 7: insert new way tags
- Delete old version from current_way_tags
- Insert rows into way_tags
- Insert rows into current_way_tags
Finally
- Return 0 (success), original way ID, new way ID, hash of renumbered nodes, bounding box