94 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from pymysql import cursors, OperationalError, Warning
 | |
| from pymysql.tests import base
 | |
| 
 | |
| import os
 | |
| import warnings
 | |
| 
 | |
| __all__ = ["TestLoadLocal"]
 | |
| 
 | |
| 
 | |
| class TestLoadLocal(base.PyMySQLTestCase):
 | |
|     def test_no_file(self):
 | |
|         """Test load local infile when the file does not exist"""
 | |
|         conn = self.connections[0]
 | |
|         c = conn.cursor()
 | |
|         c.execute("CREATE TABLE test_load_local (a INTEGER, b INTEGER)")
 | |
|         try:
 | |
|             self.assertRaises(
 | |
|                 OperationalError,
 | |
|                 c.execute,
 | |
|                 ("LOAD DATA LOCAL INFILE 'no_data.txt' INTO TABLE "
 | |
|                  "test_load_local fields terminated by ','")
 | |
|             )
 | |
|         finally:
 | |
|             c.execute("DROP TABLE test_load_local")
 | |
|             c.close()
 | |
| 
 | |
|     def test_load_file(self):
 | |
|         """Test load local infile with a valid file"""
 | |
|         conn = self.connections[0]
 | |
|         c = conn.cursor()
 | |
|         c.execute("CREATE TABLE test_load_local (a INTEGER, b INTEGER)")
 | |
|         filename = os.path.join(os.path.dirname(os.path.realpath(__file__)),
 | |
|                                 'data',
 | |
|                                 'load_local_data.txt')
 | |
|         try:
 | |
|             c.execute(
 | |
|                 ("LOAD DATA LOCAL INFILE '{0}' INTO TABLE " +
 | |
|                  "test_load_local FIELDS TERMINATED BY ','").format(filename)
 | |
|             )
 | |
|             c.execute("SELECT COUNT(*) FROM test_load_local")
 | |
|             self.assertEqual(22749, c.fetchone()[0])
 | |
|         finally:
 | |
|             c.execute("DROP TABLE test_load_local")
 | |
| 
 | |
|     def test_unbuffered_load_file(self):
 | |
|         """Test unbuffered load local infile with a valid file"""
 | |
|         conn = self.connections[0]
 | |
|         c = conn.cursor(cursors.SSCursor)
 | |
|         c.execute("CREATE TABLE test_load_local (a INTEGER, b INTEGER)")
 | |
|         filename = os.path.join(os.path.dirname(os.path.realpath(__file__)),
 | |
|                                 'data',
 | |
|                                 'load_local_data.txt')
 | |
|         try:
 | |
|             c.execute(
 | |
|                 ("LOAD DATA LOCAL INFILE '{0}' INTO TABLE " +
 | |
|                  "test_load_local FIELDS TERMINATED BY ','").format(filename)
 | |
|             )
 | |
|             c.execute("SELECT COUNT(*) FROM test_load_local")
 | |
|             self.assertEqual(22749, c.fetchone()[0])
 | |
|         finally:
 | |
|             c.close()
 | |
|             conn.close()
 | |
|             conn.connect()
 | |
|             c = conn.cursor()
 | |
|             c.execute("DROP TABLE test_load_local")
 | |
| 
 | |
|     def test_load_warnings(self):
 | |
|         """Test load local infile produces the appropriate warnings"""
 | |
|         conn = self.connections[0]
 | |
|         c = conn.cursor()
 | |
|         c.execute("CREATE TABLE test_load_local (a INTEGER, b INTEGER)")
 | |
|         filename = os.path.join(os.path.dirname(os.path.realpath(__file__)),
 | |
|                                 'data',
 | |
|                                 'load_local_warn_data.txt')
 | |
|         try:
 | |
|             with warnings.catch_warnings(record=True) as w:
 | |
|                 warnings.simplefilter('always')
 | |
|                 c.execute(
 | |
|                     ("LOAD DATA LOCAL INFILE '{0}' INTO TABLE " +
 | |
|                      "test_load_local FIELDS TERMINATED BY ','").format(filename)
 | |
|                 )
 | |
|                 self.assertEqual(w[0].category, Warning)
 | |
|                 expected_message = "Incorrect integer value"
 | |
|                 if expected_message not in str(w[-1].message):
 | |
|                     self.fail("%r not in %r" % (expected_message, w[-1].message))
 | |
|         finally:
 | |
|             c.execute("DROP TABLE test_load_local")
 | |
|             c.close()
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     import unittest
 | |
|     unittest.main()
 | 
