我有一些(SQL)脚本。他们中的大多数都有一些要求:以前应该运行的其他脚本。
您可以将合并的依赖关系树想象为有向图。我希望能够“使图表中的某个节点无效”,从而产生一个复合脚本,其中包含应重新运行以达到就绪状态的所有内容(正确的顺序)。
我想起了像Debian启动过程......有点麻烦。
编辑:如果有人需要以 W 开头且以问号结尾的明确问题,我可以给出最接近的问题: 如何实现上述行为。
Edit2:理想的解决方案是扫描与模式匹配的文件,并从第一行(注释)行读取依赖关系信息。
答案 0 :(得分:4)
你可以使用make。为戳文件创建命名约定(可能使用脚本中的日志文件)Makefile可以由脚本生成。 例如:
stamp1: stamp2 stamp3 script1.sql
sql <script1.sql > $@
stamp2: stamp3 stamp5 script2.sql
sql <script2.sql > $@
...
编辑: Makefile是有向非循环图。在上面的片段中,stamp1“依赖于”{stamp2,stamp3,script3.sql}:如果其中任何一个发生变化,它下面的行(sql&lt;&gt;)将被执行。因此,如果script1应始终在script2之后运行,则上述片段将适用。
答案 1 :(得分:2)
[抱歉,早先的回答不够通俗。现已修复]
您需要拓扑图表。见http://en.wikipedia.org/wiki/Topological_sorting,其中说:
拓扑排序的规范应用(拓扑顺序) 正在安排一系列工作或任务
定义了您的初始构建顺序以及如何从任何中间的,无效的点重新启动(只需在排序列表中找到该点并从那里开始)。
您还可以对无效点可到达的子图进行排序,这在某些情况下会减少点数(您可以避免重建原始排序上可能与无效节点“并行”构建的点及其子节点)(从一个点找到子图只需从那里进行广度优先搜索)。
ps因为订单必须相同,您只需过滤低于无效点的点的全局订单。换句话说,您不需要实际执行度假,只需从全局列表中的无效点开始,并跳过不在您的坏点下方的子图中的节点。
答案 2 :(得分:1)
您是否可以通过查找错误来使用“冒泡”订单的方法?我已经手动多次这样做了,并考虑过编写一个程序来自动化它:
给出类似的脚本列表L: