     c.sort()
     watch = misc.copy(watch)
     watch.sort()
-    c = c.concat(watch)
+    if watch.length > 0
+        c.push('|')
+        c = c.concat(watch)
     return 'change_' + misc_node.sha1("#{table} #{c.join(' ')}").slice(0,16)
 
 ###

                if err
                    # TODO! -- will have to try again... or make a version of _query that can't fail...?
                    return
                # first add any users who got added, and record which accounts are relevant
                users_now    = {}
                for account_id in users
                    if @_accounts[account_id]?
                        users_now[account_id] = true
                users_before = @_users[project_id] ? {}
                for account_id of users_now
                    if not users_before[account_id]

        if not @_match_condition(mesg[1])
            return
        if mesg[0] == 'DELETE'
            @emit 'change', {action:'delete', old_val:mesg[1]}
        else
            action = "#{mesg[0].toLowerCase()}"
            if @_watch.length == 0
                @emit 'change', {action:action, new_val:mesg[1]}
                return
            where = {}
            for k, v of mesg[1]
                where["#{k} = $"] = v
