private void split(int oldIndex, Field oldKey, Field newKey, VarKeyNode node)
			throws IOException {

		// Create new interior node
		VarKeyInteriorNode newNode = new VarKeyInteriorNode(nodeMgr, keyType);

		int halfway =
			((keyCount == 0 ? buffer.length() : getKeyOffset(keyCount - 1)) + buffer.length()) / 2;

		int splitIndex = getOffsetIndex(halfway);
		moveKeysRight(this, newNode, keyCount - splitIndex);

		// Update key entry
		if (splitIndex > oldIndex) {

			// Update key in left node
			updateKey(oldIndex, newKey);

			if (oldIndex == 0 && parent != null) {
				parent.keyChanged(oldKey, newKey, this);
			}

		}
		else {

			// Update key in new right node - node's parent changed
			newNode.updateKey(oldIndex - keyCount, newKey);
			node.parent = newNode;
		}

		if (parent != null) {
			parent.insert(newNode);
			if (newNode.parent != parent) {
				// Fix my parent
				if (parent.getKeyIndex(getKeyField(0)) < 0) {
					parent = newNode.parent;
				}
			}
			return;
		}

		// New parent node becomes root
		parent = new VarKeyInteriorNode(nodeMgr, getKeyField(0), buffer.getId(),
			newNode.getKeyField(0), newNode.getBufferId());
		newNode.parent = parent;
	}
Split this interior node and update the old key entry.
@param oldIndex index of key to be updated
@param oldKey old key value stored at oldIndex
@param newKey new key value
@param node child node containing oldKey
@throws IOException if IO error occurs
Ghidra/Framework/DB/src/main/java/db/VarKeyInteriorNode.java