最近開發 php composer 有一個功能打算用sqllite當資料庫,因為功能裡面有sql batch功能,本機端跑phpunit都是通過的,結果上 travis-ci 測試,怎麼測都測不過,後來發現原來是3.7.11之前的版本不支援sql batch。所以合理懷疑 travis-ci 上面的 sqlite 版本是3.7.11之前。

根據 stackoverflow 上面的 解答

SQLite 3.7.11 and above now supports the simpler syntax of the original post

唯一解法就像是答案所說的 ( 2015/06/11 請參考最後的補充)


INSERT INTO 'tablename' ('column1', 'column2') VALUES
  ('data1', 'data2'),
  ('data3', 'data4'),
  ('data5', 'data6'),
  ('data7', 'data8');

to

 INSERT INTO 'tablename'
      SELECT 'data1' AS 'column1', 'data2' AS 'column2'
UNION SELECT 'data3', 'data4'
UNION SELECT 'data5', 'data6'
UNION SELECT 'data7', 'data8'

or

INSERT INTO 'tablename' ('column1', 'column2') VALUES ('data1', 'data2');
INSERT INTO 'tablename' ('column1', 'column2') VALUES ('data3', 'data4');
INSERT INTO 'tablename' ('column1', 'column2') VALUES ('data5', 'data6');
INSERT INTO 'tablename' ('column1', 'column2') VALUES ('data7', 'data8');
  • 2015/06/11 補充 後來發現原來是自己不懂 travis-ci 裡面 .travis.yml 的用法 它可以做客製化依賴環境安裝,也就是可以依你需求升級 sqlite 版本,所以只要多加下面指令即可, 就可以不用為了版本問題,遷就它改寫,畢竟3.7.11之前真的是還頗舊的版本
before_install:
  - sudo apt-get autoremove sqlite3
  - sudo apt-get install python-software-properties
  - sudo apt-add-repository -y ppa:travis-ci/sqlite3
  - sudo apt-get -y update
  - sudo apt-cache show sqlite3
  - sudo apt-get install sqlite3=3.7.15.1-1~travis1
  - sudo sqlite3 -version