Repository: spark
Updated Branches:
  refs/heads/branch-1.5 aaa475c98 -> 3427f5731


[SPARK-6902] [SQL] [PYSPARK] Row should be read-only

Raise an read-only exception when user try to mutable a Row.

Author: Davies Liu <dav...@databricks.com>

Closes #8009 from davies/readonly_row and squashes the following commits:

8722f3f [Davies Liu] add tests
05a3d36 [Davies Liu] Row should be read-only

(cherry picked from commit ac507a03c3371cd5404ca195ee0ba0306badfc23)
Signed-off-by: Davies Liu <davies....@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/3427f573
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/3427f573
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/3427f573

Branch: refs/heads/branch-1.5
Commit: 3427f573106a54d04b183e8b9fd77d28badbd62c
Parents: aaa475c
Author: Davies Liu <dav...@databricks.com>
Authored: Sat Aug 8 08:38:18 2015 -0700
Committer: Davies Liu <davies....@gmail.com>
Committed: Sat Aug 8 08:38:28 2015 -0700

----------------------------------------------------------------------
 python/pyspark/sql/tests.py | 15 +++++++++++++++
 python/pyspark/sql/types.py |  5 +++++
 2 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/3427f573/python/pyspark/sql/tests.py
----------------------------------------------------------------------
diff --git a/python/pyspark/sql/tests.py b/python/pyspark/sql/tests.py
index 1e3444d..38c83c4 100644
--- a/python/pyspark/sql/tests.py
+++ b/python/pyspark/sql/tests.py
@@ -179,6 +179,21 @@ class SQLTests(ReusedPySparkTestCase):
         ReusedPySparkTestCase.tearDownClass()
         shutil.rmtree(cls.tempdir.name, ignore_errors=True)
 
+    def test_row_should_be_read_only(self):
+        row = Row(a=1, b=2)
+        self.assertEqual(1, row.a)
+
+        def foo():
+            row.a = 3
+        self.assertRaises(Exception, foo)
+
+        row2 = self.sqlCtx.range(10).first()
+        self.assertEqual(0, row2.id)
+
+        def foo2():
+            row2.id = 2
+        self.assertRaises(Exception, foo2)
+
     def test_range(self):
         self.assertEqual(self.sqlCtx.range(1, 1).count(), 0)
         self.assertEqual(self.sqlCtx.range(1, 0, -1).count(), 1)

http://git-wip-us.apache.org/repos/asf/spark/blob/3427f573/python/pyspark/sql/types.py
----------------------------------------------------------------------
diff --git a/python/pyspark/sql/types.py b/python/pyspark/sql/types.py
index e2e6f03..c083bf8 100644
--- a/python/pyspark/sql/types.py
+++ b/python/pyspark/sql/types.py
@@ -1246,6 +1246,11 @@ class Row(tuple):
         except ValueError:
             raise AttributeError(item)
 
+    def __setattr__(self, key, value):
+        if key != '__fields__':
+            raise Exception("Row is read-only")
+        self.__dict__[key] = value
+
     def __reduce__(self):
         """Returns a tuple so Python knows how to pickle Row."""
         if hasattr(self, "__fields__"):


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to