dbsrgits / sql-translator

SQL::Translator (SQLFairy)
http://sqlfairy.sourceforge.net/
82 stars 91 forks source link

Invalid statement: Was expecting comment, or use, or set, or drop, or create, or alter, or insert, or delimiter, or empty statement #33

Open rw1 opened 11 years ago

rw1 commented 11 years ago

on fedora 19 with mariadb:

yum install perl-SQL-Translator
[username@hostname ~] mysqldump -u root -pmysql_root_password database_name > example.sql
[username@hostname ~]  sqlt-graph -f MySQL -o example.png -t png example.sql

error

(line 36): Invalid statement: Was expecting comment, or use, or set, or drop, or create, or alter, or insert, or delimiter, or empty statement
Error: translate: Error with parser 'SQL::Translator::Parser::MySQL':  
no results at /usr/bin/sqlt-graph line 195.
SineSwiper commented 11 years ago

What statement?

rw1 commented 11 years ago

line 36 in the sql dump is a blank line, these are the lines that immediately follow (ie from line 37):

LOCK TABLES `tablename` WRITE;
/*!40000 ALTER TABLE `tablename` DISABLE KEYS */;
INSERT INTO `tablename` VALUES (2,'run');
/*!40000 ALTER TABLE `tablename` ENABLE KEYS */;
UNLOCK TABLES;
rw1 commented 11 years ago

As a test, I created a new database with one table and it failed with the same error at line 34:

-- MySQL dump 10.14  Distrib 5.5.31-MariaDB, for Linux (i686)
--
-- Host: localhost    Database: testing
-- ------------------------------------------------------
-- Server version   5.5.31-MariaDB

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `test_table`
--

DROP TABLE IF EXISTS `test_table`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test_table` (
  `my_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`my_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `test_table`
--

LOCK TABLES `test_table` WRITE;
/*!40000 ALTER TABLE `test_table` DISABLE KEYS */;
/*!40000 ALTER TABLE `test_table` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2013-07-29 19:00:33
rw1 commented 11 years ago

Further testing, if the .sql file is as follows, I get the same error on line 5:

DROP TABLE IF EXISTS `test_table`;
CREATE TABLE `test_table` (
  `my_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`my_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `test_table` WRITE;
UNLOCK TABLES;
rw1 commented 11 years ago

The solution was to run the mysqldump command differently, then the sqlt command worked:

[username@hostname ~] mysqldump -u root -pmysql_root_password --no-data database_name > example.sql
ian-lewis-cs commented 10 years ago

How does the example.sql file look after this?

I'm interested because I ran a no-data export and am still having similar issues with 'SQL::Translator::Parser::MySQL'.